如有下面说明语句:int a[4][5],(*p)[5];p=a;则对a数组元素的正确引用A p+1B *(p+3)C *(p+1)+3D *(*p+2)其他为什么错了、D为什么对了帮我解释下还有(*p)为什么加了括号为什么可以写p=a
来源:学生作业帮助网 编辑:六六作业网 时间:2024/12/23 10:45:08
如有下面说明语句:int a[4][5],(*p)[5];p=a;则对a数组元素的正确引用A p+1B *(p+3)C *(p+1)+3D *(*p+2)其他为什么错了、D为什么对了帮我解释下还有(*p)为什么加了括号为什么可以写p=a
如有下面说明语句:int a[4][5],(*p)[5];p=a;则对a数组元素的正确引用
A p+1
B *(p+3)
C *(p+1)+3
D *(*p+2)
其他为什么错了、D为什么对了帮我解释下
还有(*p)为什么加了括号
为什么可以写p=a
如有下面说明语句:int a[4][5],(*p)[5];p=a;则对a数组元素的正确引用A p+1B *(p+3)C *(p+1)+3D *(*p+2)其他为什么错了、D为什么对了帮我解释下还有(*p)为什么加了括号为什么可以写p=a
a是一个(int类型的)二维数组(二维数组本质上是一个维数组)
p先是一个指针,这外指针指向一个一维数组(int类型的)
p=a表示将指针p的值 斌成二维数组的首地址
A p是一个指针P+1 实际上是首地址 挪5个int位置是地址 返回的是一个地址的值(指向一个int数组的地址)
B (P+3)取得的也是一个地址的值(指向一个int数组的地址)再结合* 得到是一个首地址的值然后再取它的内容做为地址
即 int a[4][5] 中的int a[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类型