标签:c语言
经常遇到这两个概念,很容易混淆,这里细细总结一下。
指针数组:是一个数组,数组的元素是指针。数组占多少个字节由数组本身决定。
数组指针:是一个指针,它指向一个数组。在32位系统下永远是占4 个字节。
举例说明:
1)int *p1[n];
2)int (*p2)[n];
1)“[]”的优先级比“*”要高。p1 先与“[]”结合,构成一个数组的定义,数组名为p1,int *修饰的是数组的内容,即数组的每个元素。即p1是指针数组,其包含n个指向int 类型数据的指针。
2)“()”的优先级比“[]”高,“*”号和p2 构成一个指针的定义,指针变量名为p2,int 修饰的是数组的内容,即数组的每个元素。数组在这里并没有名字,是个匿名数组。即p2是数组指针,它指向一个包含n 个int 类型数据的数组。
如要将二维数组赋给一指针,应这样赋值:
int a[3][4];
int (*p)[4]; //该语句是定义一个数组指针,指向含4个元素的一维数组。
p=a; //将该二维数组的首地址赋给p,也就是a[0]或&a[0][0]
p++; //该语句执行过后,也就是p=p+1;p跨过行a[0][]指向了行a[1][]
所以数组指针也称指向一维数组的指针,亦称行指针。
标签:c语言
原文地址:http://blog.csdn.net/lsh_2013/article/details/44926631