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

2024年11月15日 12:25
有5个网友回答
网友(1):

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

网友(2):

(*p)[2] 是一个数组指针,指向含2个元素的一维数组。

对于为什么是一个数组指针,而不是一个指针数组的解释如下:
( )优先级高,首先说明p是一个指针,指向一个整型的一维数组,这个一维数组的长度是2。

指针数组的定义如下:
int *p[n] // 定义了一个指针数组,该数组中每个元素(共有n个元素)都是一个指针,至于每个指针所指向的地址就要看后面的程序定义了。
对于*p[n]为什么是指针数组解释如下:
[ ]优先级高,先与p结合成为一个数组,再由int*说明这是一个整型指针数组,它有n个指针类型的数组元素。

网友(3):

int (*p)[2]是数组指针,如果写成int *p[2]则是大小为2的指向整型的指针数组。
为什么需要括号呢,因为下标运算符[]的优先级高于运算符*。

网友(4):

上边实际上是 int (*p)[2];是声明了一个数组指针。是指向数组的一个指针,如int (*p)[10] 表示一个指向10个int元素的数组的一个指针。

网友(5):

错了吧,这样看的话p应该是个行指针
(*p)是转成列指针,(*p)[2]应该是取第三列的值
a[3][2]的话没有第三列的

应该把完整一点的代码贴上来再看