二维数组表达式*(*(a+2)+3)求值疑问及解法咨询
关于二维数组表达式
*(*(a + 2) + 3)的分析 先明确C语言二维数组的寻址逻辑:
- 数组名
a是指向数组首元素的指针,类型为int (*)[3](指向含3个int的数组的指针)。 a + 2指向数组的第三行(下标从0开始),等价于&a[2];解引用后*(a + 2)就是a[2],此时它的类型是int *,指向a[2][0]。*(a + 2) + 3表示a[2]这个指针向后偏移3个int的位置,对应&a[2][3]。- 最终
*(*(a + 2) + 3)等价于a[2][3]。
题目是否存在错误?
存在错误。你定义的是3×3数组,合法的行、列下标范围都是0、1、2,a[2][3]的列下标3超出了数组的有效范围(最大列下标为2)。
在C语言中,数组越界访问属于未定义行为——程序可能读取到数组之后内存中的随机值,也可能直接崩溃,没有确定的合法结果。所以这个表达式无法得到预期的数组元素值,题目本身存在数组越界的问题。
内容的提问来源于stack exchange,提问作者hgig
相关产品推荐
相关产品推荐

