[英]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};
您的第二个输出将显示4
或0
,分别取决于您使用的是小端系统还是大端系统。 假设您有一个4字节的int
类型。
我认为您的意思是:
char arr[3] = {2,3,4};
现在,p是char类型的指针,当您将其递增8时,它指向位于char数组之外的某个无效内存位置(因为您已经为3分配了空间)
arr中的成员),其中很可能包含垃圾。
在这种情况下,输出是不可预测的,因为它可能是垃圾,或者您可能会得到有效的
值。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.