一道关于C语言的笔试题

#include<stdio.h>voidmain(void){inta[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf("%d,%... #include<stdio.h>
void main( void )
{ int a[5]={1,2,3,4,5};
int *ptr=(int *)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));
return;
}
输出结果为:2,5
其中的5是怎么得出来的?
展开
 我来答
信长大
2012-09-16
知道答主
回答量:39
采纳率:0%
帮助的人:22.1万
展开全部
a[5]={1,2,3,4,5};在内存中占相邻的五个空间,(int *)(&a+1)指的是数组a后面的第一个内存空间,又赋值给了ptr,所以,ptr往前移动一个位置,刚好指到a的最后一个元素
追问
谢谢!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ANDLANDWO
2012-09-16 · TA获得超过181个赞
知道小有建树答主
回答量:168
采纳率:0%
帮助的人:130万
展开全部
int *ptr=(int*)(&a+1); // 这里ptr指向数组a的尾部,相当于 int *ptr = (int*)(&(a[5]));
&a如果看作是指针的话,那么它所管理的大小是sizeof(int)*5,
*(ptr-1) 这时可以看作 a[5-1] => a[4] => 5
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
sun_siliang
2012-09-16 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4564万
展开全部
&a+1的值为元素a[4]后面的那个存储单元,ptr-1指向a[4],因此输出5。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式