void main(void) { int a[5]={1,2,3,4,5}; int *p=(int *)(&a+1); printf("%d\n",p[-1]);} 答案为啥是5?

运行之后答案确实是5.请问int*p=(int*)(&a+1);p[-1]这两个怎么理解呢?... 运行之后答案确实是5.
请问int *p=(int *)(&a+1);
p[-1]
这两个怎么理解呢?
展开
 我来答
梦醒还追
2011-12-22
知道答主
回答量:24
采纳率:0%
帮助的人:25.1万
展开全部
int *p=(int *)(&a+1);对于a[5]来说a是该数组的首地址,而&a是该数组的行地址,虽然值是一样,但意义不同,而&a+1则表示该数组存储单元的后一个地址,a+1表示数组的第二个元素的地址。p[-1]表示p所在地址减一的地址下的值,也就是a[4]的值
百度网友ec09c0a
2011-12-22 · 超过16用户采纳过TA的回答
知道答主
回答量:64
采纳率:0%
帮助的人:38万
展开全部
&a 代表的是一维数组行地址 加1 即加1行 因此 &a+1 即为&a[5] 。
int *p=(int *)(&a+1) 即p保存了&a[5]的地址 p[-1] 即p - 1, 为a[4].
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
天扬龙小四
2011-12-22 · 超过22用户采纳过TA的回答
知道答主
回答量:91
采纳率:0%
帮助的人:45.6万
展开全部
个人理解 int *p=(int *)(&a+1); 这里相当于把一维数组变成2维数组了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式