合聚咖

合聚咖

c语言中(*p)[2]什么意思

admin

(*p)[2];

书上说的没有错,

意思是说,

首先p是一个指针。

其次,指针p是指向的什么,那就要看后面的[2]了,意思是说,指针p必须指向一个数组,这个数组而且必须至少得有2个元素。

因此指针变量p是一个指向包含有两个int元素的数组的指针。

初始化实例:

int a[3][2]; int b[2]; int c[3](*p)[2];

p=&a[0]; //正确

p=&a[1]; //正确

p=a[0]; //错误

p=a[1]; //错误

p=b; //错误

p=&b; //正确

p=c; //错误

p=&c; //错误

解释如下:

二维数组a,其a[0]表示的是数组元素a[0][1]的地址,也就是说a[0]与&a[0][1]是相等的,因此a[0]不是一个包含两个元素的数组的地址,所以错误

二维数组a, 其&a[0]表示的含有两个元素的数组的地址,这两个元素是a[0][0]和a[0][1],该表达式的具体原因比较复杂,若想了解清楚,就请在本人的文库里下载有关指针方面的专题看看吧。

p=b; 错误,因为b表示的是数组元素b[0]的地址,也就是b与&b[0]相同,所以他不是一个包含有两个元素的数组的地址,所以错误

p=&b; 原理同二组数组,&b才是表示的是真正的数组b的地址,虽然数组名b表示的是一个地址,但他是表示的数组中的首元素的地址(你要注意理解这句话,因为所有书上都是这样说的),可以看出,数组名不是表示的是数组的地址,而是首元素的地址。

当然p=c; p=&c的错误就一目了然了。