数组指针:首先它是一个指针,它指向一个数组。在32 位系统下永远是占4 个字节,至于它指向的数组占多少字节,不知道。它是“指向数组的指针”的简称。
数组名就是数组的首地址,其实数组名也是一个指针,只不过是一个常量指针非变量指针。常量是不能变化的,变量是能变化的。
int a[4],*p=a;上面这个语句表明指针p指向数组a的首地址,p+1指向a[1]的地址,用数组名也可以这样表示:
a+1 a+[1]a+1也是a[1]的地址,p+1和a+1和&a[1]都是等价的,都是代表a[1]的地址,同样p+3指向的是a[3]的地址,也是数组a的最后一个元素的地址,a+3也是这个作用,注意:++p代表p=p+1,此时指向的是a[1]的地址,但是++a这样的用法是不合法的,因为a就是数组的首地址,首地址是不变的,指针p是个变量可以变,所以p+1之后再赋值给p是合法的,我们利用数组名给数组赋值。
int a[5],i; for(i=0;i<5;i++) { *(a+i)=i; }上面的程序段中a+i一定要用括号()括起来,这表明先计算地址再取这个地址中的内容,现在你来把数组中的值打印出来吧:
int main(void) { int a[5],i; for(i=0;i<5;i++) *(a+i)=i; printf(“%d\n”,*(a+i)); return 0; }