c语言数组指针问题

c语言数组指针问题若有定义:int a[4][3],(*prt)[3]=a,*p=a[0];,则不能正确表示数组元数a[1][2]的表达式是

A.*(*(prt+1)+2) B.*(p+5) C.(*(prt+1))[2]
D.*((*prt+1)[2] 不明白题意

拿起你的课本 翻到指针和多维数组那一节 认真看几遍
prt是一个指向二维数组int a[4][3]的指针 和a一样 指向a[0]
a[0]是a[0][0]的地址 所以p指向a[0][0]
对一个指针加一,会对原来的数值加上一个对应类型大小的数值。a和prt所指向的对象是三个int, 而p所指向的对象是一个int.
*(*(prt+1)+2) prt+1指向a[1] 而a[1]的值是a[1][0]的地址 所以*(prt+1)是指向a[1][0]
所以*(prt+1)+2指向a[1][2].
因为数组里面各元素是连续存储的 所以*(p + 5)实际指向了a[1][2]
第三个和第一个差不多
第四个*ptr是a[0][0]的值 *ptr + 1 指向a[0][1] 另外你好像少了一个反括号追问

a和prt所指向的对象是三个int, 而p所指向的对象是一个int.
这是为啥?

温馨提示:答案为网友推荐,仅供参考
相似回答