若已知“int a[3][7];”,则用指针表示数组a中的元素时,下列表示中错误的是( )。

admin2020-06-29  26

问题 若已知“int a[3][7];”,则用指针表示数组a中的元素时,下列表示中错误的是(    )。

选项 A、*(a+1)[5]
B、*(*a+3)
C、*(*(a+1))
D、*(&a[0][0]+2)

答案A

解析 二维数组a中有三个元素,每个元素都是包含7个元素的一维数组a[0],a[1],a[2],另外二维数组名相当于一个指向指针的指针,一维数组的数组名相当于指针,所以*a指向一维数组a[0],*(a+1)指向一维数组a[1],*(a+2)指向一维数组a[2],所以选项B中,*a+3指向一维数组a[0]的首地址(列地址)向后移动3位,即指向a[0][3],*(*a+3)表示a[0][3],正确;选项C中,*(a+1)指向一维数组a[1],同时也指向一维数组a[1]的第一个元素,所以*(*(a+1))表示a[1][0],正确;选项D中,&a[0][0]代表一维数组a[0]的第一个元素地址,也表示数组a[0]的首地址,所以&a[0][0]+2表示数组a[0]的首地址向后移动2位,指向a[0][2],*(&a[0][0]+2)表示a[0][2],正确;所以选项B、C、D都是正确的;由于[]运算符优先级比*高,所以选项A中的表达式等价于:*((a+1)[5]),a+1是一维数组a[1]的首地址,这是一个行地址,也就是说(a+1)[5]是a+1向后偏移5个地址,即为(a+6),故*((a+1)[5])应该是元素a[6][0],出现数组越界错误,答案为A选项。
转载请注明原文地址:https://jikaoti.com/ti/s7A0FFFM
0

最新回复(0)