Hello int指针类型与char指针一起输出意外输出? 下面是我的代码,请帮助我理解
#include<stdio.h>
int main()
{
int arr[3]={2,3,4};
char*p;
p=(char*)arr;
printf("%d\n",*p); // here 2 its good
p=p+8;
printf("%d\n",*p);//here 4 why not 1?
}
答案 0 :(得分:2)
您的代码会导致未定义的行为。首先,我假设你的意思是:
char arr[3] = {2,3,4};
而不是你在那里。然后是的,你的第一个打印语句是正确的,并将输出2.第二个,但任何事情都可能发生。你有一个3字节长的数组,现在你指向8个字节超过其起始地址。 任何都可以存在,因此您的打印可以显示任何输出。
如果您改为:
int arr[3] = {2,3,4};
您的第二个输出会显示4
或0
,具体取决于您是否分别使用小端或大端系统。假设你有一个4字节的int
类型,那就是。
答案 1 :(得分:0)
我认为你的意思是:
char arr[3] = {2,3,4};
现在,p是char类型的指针,当你将它递增8时,它指向一些无效的指针 位于char数组之外的内存位置(因为您已为3分配了空间) arr内的成员,可能很好地包含垃圾 在这种情况下,输出是不可预测的,因为它可能是垃圾,或者你可能得到有效的 值。