一道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;
} 展开
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;
} 展开
展开全部
#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 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的确切地址的值
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询