写在前
一个指针变量指向某个普通变量,则指针变量就等于普通变量。
指针变量存放的是地址,普通变量存放的是数据。
int * p;
int i=5,j;
p = &i;
此程序,*p=i=5,在所有出现 *p 或 i 的位置,两者都可以互相替换。
通过
j = *p;
可以将i的值5赋给j。
通过指针p间接访问变量a,改变a的值
{int a;int *p=&a;printf("请输入整数:");scanf("%d",&a);printf("a=%d\n",a);printf("请输入整数:");scanf("%d",p);printf("a=%d\n",a);return 0;}
一维数组名a存放的是数组第一个元素的地址a[0]
数组名就是个地址信息,数组名就是数组第一个元素的地址。
#include <stdio.h>
int main ()
{int a[5];printf ("%d\n",&a[0]);//此处输出为a[0]的地址 6487552printf ("%d\n",a);//此处输出为数组名a的含义 6487552return 0;
}
如果p是一个指针变量,那么p[i]永远等价于*(p+i)
#include <stdio.h>
int main()
{int a[5] = { 1,2,3,4,5};int i;for( i = 0 ; i < 5 ; i++ ){printf("%d " , a[i]);}printf ("\n");for(i = 0 ; i < 5 ; i++ ){printf("%d " , *(a+i));}return 0 ;
}
注意:
int (*p[5])
定义了一个数组,数组名为p,其中包含5个指针,指针指向整型类型数据;
int (*p)[5]
定义了一个指针,指针指向一个数组,数组中有5个元素,元素类型为整型。
#include <stdio.h>
int main()
{char a[] ="iwatch";int b[5]={1,2,3,4,5};float c[5]={1.1,2.2,3.3,4.4,5.5};double d[5]={1.1,2.2,3.3,4.4,5.5};printf("a[0] -> %p, a[1] -> %p, a[2] -> %p \n",&a[0],&a[1],&a[2]);printf("b[0] -> %p, b[1] -> %p, b[2] -> %p \n",&b[0],&b[1],&b[2]);printf("c[0] -> %p, c[1] -> %p, c[2] -> %p \n",&c[0],&c[1],&c[2]);printf("d[0] -> %p, d[1] -> %p, d[2] -> %p \n",&d[0],&d[1],&d[2]);return 0;
}
#include <stdio.h>
int main()
{char a[] ="iwatch";int b[5]={1,2,3,4,5};float c[5]={1.1,2.2,3.3,4.4,5.5};double d[5]={1.1,2.2,3.3,4.4,5.5};char *p=a;printf("*a = %c, *(a+1) = %c, *(a+2) = %c\n",*a,*(a+1),*(a+2));printf("*p = %c, *(p+1) = %c, *(p+2) = %c\n",*p,*(p+1),*(p+2));int *q=b;printf("*b = %d, *(b+1) = %d, *(b+2) = %d\n",*b,*(b+1),*(b+2));printf("*q = %d, *(q+1) = %d, *(q+2) = %d\n",*q,*(q+1),*(q+2));printf("a[0] -> %p, a[1] -> %p, a[2] -> %p \n",&a[0],&a[1],&a[2]);printf("b[0] -> %p, b[1] -> %p, b[2] -> %p \n",&b[0],&b[1],&b[2]);printf("c[0] -> %p, c[1] -> %p, c[2] -> %p \n",&c[0],&c[1],&c[2]);printf("d[0] -> %p, d[1] -> %p, d[2] -> %p \n",&d[0],&d[1],&d[2]);return 0;
}
#include <stdio.h>
#include <cstring>
int main()
{char *str="I love iwatch!";int i,length;length=strlen(str);for(i=0;i<length;i++){printf("%c",str[i]);}return 0;
}