int指针使用char指针进行类型转换意外输出?

时间:2014-09-19 17:08:40

标签: c pointers gcc

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?
 }

2 个答案:

答案 0 :(得分:2)

您的代码会导致未定义的行为。首先,我假设你的意思是:

 char arr[3] = {2,3,4};

而不是你在那里。然后是的,你的第一个打印语句是正确的,并将输出2.第二个,但任何事情都可能发生。你有一个3字节长的数组,现在你指向8个字节超过其起始地址。 任何都可以存在,因此您的打印可以显示任何输出。

如果您改为:

int arr[3] = {2,3,4};

您的第二个输出会显示40,具体取决于您是否分别使用小端或大端系统。假设你有一个4字节的int类型,那就是。

答案 1 :(得分:0)

我认为你的意思是:

char arr[3] = {2,3,4};

现在,p是char类型的指针,当你将它递增8时,它指向一些无效的指针 位于char数组之外的内存位置(因为您已为3分配了空间) arr内的成员,可能很好地包含垃圾 在这种情况下,输出是不可预测的,因为它可能是垃圾,或者你可能得到有效的 值。