一道C语言编程题,不知为什么会有这样的输出

#include<stdio.h>intmain(){inta[5]={1,2,3,4,5};int*ptr1=(int*)(&a+1);int*ptr2=(int*)(... #include<stdio.h>
int main( )
{
int a[5]={1,2,3,4,5};
int *ptr1 =(int*)(&a+1);
int *ptr2 =(int*)((int)a+1);
printf("%x,%x",ptr1[-1],*ptr2 );
return 0;
}
展开
 我来答
lileitodev
2012-11-06 · TA获得超过159个赞
知道小有建树答主
回答量:171
采纳率:33%
帮助的人:113万
展开全部
#include<stdio.h>
int main( )
{
int a[5]={1,2,3,4,5};
int *ptr1 =(int*)(&a+1);
int *ptr2 =(int*)((int*)a+1);//这个地方不是你仔细比照少了一个*,
printf("%x,%x",ptr1[-1],*ptr2 );
return 0;
}
运行出来是5,2

&a是个行指针 它的步长是4*5=20,&a+1偏移了整个一维数组所以它直接指向了a[6](逻辑上的)
ptr1[-1]就相当于a[5]即输出5

nt *ptr2 =(int*)((int*)a+1);强转a为int型步长是4 所以*ptr=a[2]

所以输出2
追问
书上在int *ptr2 =(int*)((int)a+1);确实没有*,这题跟以前的华为面试题很像,不过我的电脑最后输出5,2000000
追答
没有那个*就毫无意义了  因为你觉得把一个指针转成int型有意义吗?这个输出是无法预料的
因为你无法知道a的确切地址的值
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式