繁体   English   中英

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

[英]int pointer typecasted with char pointer throw unexpected output?

你好,用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类型。

我认为您的意思是:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM