立即学习:https://edu.youkuaiyun.com/course/play/8088/165748?utm_source=blogtoedu
1. 指向数组元素的指针变量的定义和赋值
c语言规定数组名代表数组的首地址(也就是第一个元素a[0]的地址),所以如下两个语句等价:
p = &a[0];
p = a; //把a数组的首地址赋给指针p,所以p此时指向数组首地址。
定义指针变量时也可以给指针赋初值。
int *p = &a[0]; //将a的首地址(a[0]的地址赋给指针变量p),所以p指向了a[0];
等价于
int *p;
p = &a[0]; //这里不要写成 *p=&a[0]; 只有在定义指针变量并赋初值时才会出现*号;
2. 通过指针引用数组元素
(1)*p = 19; //表示对p当前所指向的数组元素赋值19;也就是a[0] = 19;
(2)p = p+1;//C语言规定p+1并不是简单的将P值+1,具体加几取决于指针变量p的类型,如果指针变量p为整型,则因为整型占4个字节内存,所以p+1相当于增加了4,p+1就使p指向了数组的下一个元素a[1];
(3)p+i 或者a+i意义(i是数组元素的下标):
假如p指向数组首地址,那么p+i或者a+i就是数组元素a[i]的地址,即他们指向数组a的第i个元素。也就是说,p+3和a+3的值(地址)都是&a[3],都指向a[3]
(4)*(p+i)或者 *(a+i)意义:p+i或者a+i所指向的数组元素,也就是a[i],比如*(p+2)或者*(a+2)就是a[2]
(5)p[i]意义:指向数组的指针变量p,p[i]跟数组元素等价,如p[i],与*(p+i)等价,也与a[i]等价
(6) *p++ 的含义:自增运算符和指针运算符优先级相同,并且是自右至左结合的,所以等价于*(p++); 整个的作用是得到p指向的变量的值(*p),然后再使p指针自加1,指向下一个数组元素
(7) *++p 的含义:先使p+1,然后取p值,所以实际上输出是a[1]的值,当然p也指向a[1]
(8)(*p) ++ 含义:表示p所指向的元素加1,如果p指向数组首地址,那么就等价于a[0]++,而不是指针值+1