c - 使用 char 指针类型转换的 int 指针抛出意外输出?

标签 c pointers gcc

你好,用 char 指针转换的 int 指针类型抛出意外输出? 下面是我的代码,请帮助我理解

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

最佳答案

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

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

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

如果你有:

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

您的第二个输出将显示 40,这分别取决于您是否拥有小端系统或大端系统。假设您有一个 4 字节的 int 类型。

关于c - 使用 char 指针类型转换的 int 指针抛出意外输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25939081/

相关文章:

c - 为什么在使用 "Quotes"创建 char* 时不需要释放内存

gcc - 使用 GCC 为 AmigaOS 重新编译应用程序的常见问题解答?

c - C 中位域和 union 的大小

关于运算符优先级的澄清

c - 识别环绕号码

java - 处理与 JNI 的关联

c++ - 从 GCC 可执行文件中剥离符号和 RTTI 文本

c - 如何在我的计算机上获得 C 标准?

c - 在 Cygwin 下链接 Windows .dll+.lib 文件组合和 GCC?

C++ 指针/引用