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

为何通过char*打印int数组的输出为1000、2000?请解惑

程序输出1000和2000的原因解析

关键细节拆解

  • int的字节长度:当前运行环境中int类型占4个字节,所以数组t的总大小sizeof(t)为 2 * 4 = 8 字节,循环会执行8次。
  • 小端字节序存储:系统采用小端模式存储多字节数据——即多字节数值的低字节会被放在内存的低地址处。
    • 数组里的整数1,在内存中按字节拆分后是:0x01、0x00、0x00、0x00(对应十进制的1、0、0、0)
    • 数组里的整数2,在内存中按字节拆分后是:0x02、0x00、0x00、0x00(对应十进制的2、0、0、0)
  • char指针的逐字节访问:代码中将int数组的地址强制转为char*类型,这使得*(p+i)会逐个读取数组的每个字节(而非直接读取int元素)。
  • 打印逻辑:循环中每次直接打印当前字节的十进制值,没有分隔符,所以前4次打印的内容会连在一起变成1000;当i等于3(第一个int的最后一个字节索引)时执行换行。后4次打印同理,连在一起变成2000后换行。

附加验证

如果修改代码,给每个打印的字节加空格,就能看到拆分后的单个数字:

int main()
{
    int t[] = { 1, 2 };
    char* p = (char*)t;
    int i;
    for (i = 0; i < sizeof(t); i++)
    {
        printf("%d ", *(p + i));
        if (i % sizeof(t[0]) == sizeof(t[0]) - 1) printf("\n");
    }
    return 0;
}

此时输出会变为:

1 0 0 0 
2 0 0 0 

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 12:30:52