You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何将字符数组转int指针后,输出*pi得到“65 A”?

问题解答:为何int指针读取char数组得到65?

先看你的代码:

char c[4] = { 'A', '\0', '\0', '\0' };
int* pi = (int*)&c[0];
printf("%x %x %x %x\n", c[0], c[1], c[2], c[3]);
printf("%x %x %x %x\n", *((unsigned char *)pi), *((unsigned char*)pi + 1), *((unsigned char*)pi + 2), ((unsigned char*)pi)[3]);
printf("%d %c\n", (int)c[0], c[0]);
printf("%d %c\n", *pi, (char)*pi);

你的理解误区出在字节序(endianness)上,现在绝大多数计算机都采用小端模式:

  • 小端模式下,多字节数据的低字节会存在内存的低地址位置,高字节则存在高地址位置。

来看你的字符数组c的内存布局(地址从低到高排列):

内存地址存储内容(十六进制)
&c[0]0x41('A'的ASCII值)
&c[1]0x00
&c[2]0x00
&c[3]0x00

当你把数组首地址&c[0]强制转换成int*类型后,*pi会把这连续4个字节当作一个int类型来读取。在小端模式下,这4个字节组合成的int值是0x00000041,转成十进制就是65,正好是'A'的ASCII码值。

如果是大端模式的机器(现在极少使用),*pi读取到的值会是0x41000000(十进制为68719476736),但这种情况几乎不会遇到。

你提到'A'不是数组的最后一个元素,但小端模式下int的最低有效字节对应数组的第一个元素,所以读取出来的int值自然就是65了。

内容的提问来源于stack exchange,提问作者ModernJason1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:45:38