C++ 设有语句int array[3][4]; 则在下面几种引用下标为 i和j 的数组元素的方法中,不正确的引用方式是?

设有语句int array[3][4]; ,则在下面几种引用下标为 i和j 的数组元素的方法中,不正确的引用方式是()
A. array[i][j] B.*(*(array + i)+ j)
C. *(array[i] + j) D.*(array + i * 4 + j)

D
D引用的为 array[i*4 + j],为一个数组,而不是下标为i和j的数组元素
注意 *(a+x) 等价于 a[x]
答案D的正确写法应该为*((int*)array + i * 4 + j),即将array当做int的指针来操作(原本array的类型为int[3][4],并decay为int(*)[4],即指向数组的指针,而不是int*)追问

能再详细点吗?其他的选项也麻烦解释一下吧!谢谢了~~

追答

答案A 显然是访问二维数组的一般方法
答案B 首先将 array 当做指向 int[4]的指针,利用i选择对应数组,之后再当做int的指针并用 j 选择对应元素
答案C array[i] 是一个数组(二维数组为数组的数组),访问数组的第j个元素可以写成*(a + j)的形式
答案D的正确写法应该为*((int*)array + i * 4 + j),即将array当做int的指针来操作(原本array的类型为int[3][4],并decay为int(*)[4],即指向数组的指针,而不是int*)

温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-01-04
B array可以看做指针 加了两个*号,出来的还是指针,所以绝对是B错
第2个回答  2013-01-04
B 为错误,因为是数组,不是间接指针追问

可是老师给的答案是D。。。为什么呢?

追答

以c编译器的执行正确为主, 你可以自己测试一下.

如果是在tc下 D 也是可以得到正确结果的,而B 即使在VC 下也无法正确执行.

每个人都会犯错误,老师也是普通人.

第3个回答  2013-01-04
你可以看下下面的参考

参考资料:参考资料:资料来源:Yes安全联盟

第4个回答  2013-01-04
应该选择B
相似回答