位置:首页 » 文章/教程分享 » C语言指针数组
初学者总是分不出指针数组与数组指针的区别。其实很好理解:

指针数组:首先它是一个数组,数组的元素都是指针,数组占多少个字节由数组本身决定。它是“储存指针的数组”的简称。

数组指针:首先它是一个指针,它指向一个数组。在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;
}