C语言指针问题求大神解答

如有下面说明语句:inta[4][5],(*p)[5];p=a;则对a数组元素的正确引用Ap+1B*(p+3)C*(p+1)+3D*(*p+2)答案是D其他为什么错了、D... 如有下面说明语句: int a[4][5],(*p)[5];p=a;则对a数组元素的正确引用
A p+1
B *(p+3)
C *(p+1)+3
D *(*p+2)
答案是D
其他为什么错了、D为什么对了帮我解释下
还有(*p)为什么加了括号
为什么可以写p=a
展开
 我来答
百度网友b7e35fa
2014-01-08 · 超过10用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:31.3万
展开全部
a是一个(int类型的)二维数组(二维数组本质上是一个维数组)
p先是一个指针,这外指针指向一个一维数组(int类型的)
p=a表示将指针p的值 斌成二维数组的首地址
A p是一个指针P+1 实际上是首地址 挪5个int位置是地址 返回的是一个地址的值(指向一个int数组的地址)
B (P+3)取得的也是一个地址的值(指向一个int数组的地址)再结合* 得到是一个首地址的值然后再取它的内容做为地址
即 int a[4][5] 中的int a[2][0] 这个位置的地址 再进行退化成 一个一维数组的别名 即 也可看成一个 指向int类型的 地址
C 他是在指向int 类型的地址再向后挪3位 即 是到a[3][3]这个位置 的地址 返回 他还是一个指针

D 返回的是对应二维数组中a[2][0]的这个元素的值

总结一下
A返回的是a[1][0]这个位置的地址 并且 告诉编译器 它是一个指向一维int [5]类型数据的指针
B返回的是a[3][0]这个位置的地址 并且 告诉编译器 它是一个指向 int的地指针
C返回的是a[3][3]这个位置的地址 并且 告诉编译器 它是一个指向 int的地指针
D返回的是a[2][0]这个位置的别名 它是一个int类型
百度网友c9c39d5
2014-01-08
知道答主
回答量:23
采纳率:0%
帮助的人:11.8万
展开全部
  int(*p)[5]代表的是定义p为一个指针变量,它指向包含5个整型元素的一维数组;
p=a 的含义是将p指向二维数组中第零行的首个元素 *p+2 的含义是二维数组中a[2]即第二列的地址,而*(*p+2)则是对a[2][0]的引用。
A:p+1 无意义。
B:是a[3][0]的地址;不是对元素的引用。
C:也是地址,是a[1][3]的地址,如果写成*(*(p+1)+3),则是元素a[1][3]的值。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c281b4c
2014-01-08 · TA获得超过2293个赞
知道大有可为答主
回答量:2382
采纳率:50%
帮助的人:1043万
展开全部
二维数组指针需要两次解引用*才能获得二维数组元素值。所以是D。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式