如有下面说明语句:inta[4][5],(*p)[5];p=a;则对a数组元素的正确引用Ap+1B*(p+3)C*(p+1)+3D*(*p+2)其他为什么错了、D为什么对了帮我解释下还有(*p)为什么加了括号为什么可以写p=a
如有下面说明语句:inta[4][5],(*p)[5];p=a;则对a数组元素的正确引用
Ap+1
B*(p+3)
C*(p+1)+3
D*(*p+2)
其他为什么错了、D为什么对了帮我解释下
还有(*p)为什么加了括号
为什么可以写p=a
如有下面说明语句:inta[4][5],(*p)[5];p=a;则对a数组元素的正确引用Ap+1B*(p+3)C*(p+1)+3D*(*p+2)其他为什么错了、D为什么对了帮我解释下还有(*p)为什么加了括号为什么可以写p=a
如有下面说明语句:inta[4][5],(*p)[5];p=a;则对a数组元素的正确引用
Ap+1
B*(p+3)
C*(p+1)+3
D*(*p+2)
其他为什么错了、D为什么对了帮我解释下
还有(*p)为什么加了括号
为什么可以写p=a
a是一个(int类型的)二维数组(二维数组本质上是一个维数组)
p先是一个指针,这外指针指向一个一维数组(int类型的)
p=a表示将指针p的值斌成二维数组的首地址
Ap是一个指针P+1实际上是首地址挪5个int位置是地址返回的是一个地址的值(指向一个int数组的地址)
B(P+3)取得的也是一个地址的值(指向一个int数组的地址)再结合*得到是一个首地址的值然后再取它的内容做为地址
即inta[4][5]中的inta[2][0]这个位置的地址再进行退化成一个一维数组的别名即也可看成一个指向int类型的地址
C他是在指向int类型的地址再向后挪3位即是到a[3][3]这个位置的地址返回他还是一个指针
D返回的是对应二维数组中a[2][0]的这个元素的值
总结一下
A返回的是a[1][0]这个位置的地址并且告诉编译器它是一个指向一维int[5]类型数据的指针
B返回的是a[3][0]这个位置的地址并且告诉编译器它是一个指向int的地指针
C返回的是a[3][3]这个位置的地址并且告诉编译器它是一个指向int的地指针
D返回的是a[2][0]这个位置的别名它是一个int类型