void main(void) { int a[5]={1,2,3,4,5}; int *ptr=(int *)(&a+1); printf("%d%d",*(a+1),*(ptr-1)); }

#include<stdio.h>voidmain(void){inta[5]={1,2,3,4,5};int*ptr=(int*)(&a+1);printf("%d%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));
}

输出为2,5 怎么得到的
展开
 我来答
上帝吻了她
2021-07-25 · TA获得超过145个赞
知道答主
回答量:22
采纳率:0%
帮助的人:2.8万
展开全部

int a[5]表示a是一个有5个int型数据的数组,&a表示取a数组的地址,一维数组的地址是首个元素所在的地址,所以&a+1代表的是a这个数组本身在进行+1操作,即&a加了1个5个int型,跳到了a[5]后面的地址

看一下这个题的变种

金色潜鸟
推荐于2017-10-15 · TA获得超过3.2万个赞
知道大有可为答主
回答量:1.3万
采纳率:89%
帮助的人:5739万
展开全部
&a 可以看成 你 声明了:
int a[2][5]={1,2,3,4,5};
&a 是 地址 &a[0][0]
&a + 1 是 地址 &a[1][0];
所以 , ptr 的 初始化 指向 了 a 的 首地址 加 偏移 sizeof(int) * 5
----
int a[5]={1,2,3,4,5};
printf("%d%d",*(a+1),*(ptr-1));
语句中 *(a+1) 就是 a[1], 输出 2
*(prt-1) 就是 a[4], 输出 5,
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2015-11-11 · TA获得超过2695个赞
知道大有可为答主
回答量:2808
采纳率:50%
帮助的人:1967万
展开全部
这题的关键在int *ptr=(int *)(&a+1);这一句上,&a表示取得数组a存储区域的首地址,再加1表示数组a存储区域的后的地址,这就使得ptr指针指向数组的最后一个元素后面的那个存储单元的地址,而ptr减1后,再进行数据访问,则访问的是ptr指针的前一个存储单元的值,所有最后的答案是2,5
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式