(*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的错误就一目了然了。