设有语句int array[3][4]; ,则在下面几种引用下标为 i和j 的数组元素的方法中,不正确的引用方式是()
A. array[i][j] B.*(*(array + i)+ j)
C. *(array[i] + j) D.*(array + i * 4 + j)
能再详细点吗?其他的选项也麻烦解释一下吧!谢谢了~~
追答答案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*)
可是老师给的答案是D。。。为什么呢?
追答以c编译器的执行正确为主, 你可以自己测试一下.
如果是在tc下 D 也是可以得到正确结果的,而B 即使在VC 下也无法正确执行.
每个人都会犯错误,老师也是普通人.
参考资料:参考资料:资料来源:Yes安全联盟