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

请解释这段C语言指针代码的输出为何是513?

为什么这段C语言代码的输出是513?

先贴出代码:

#include<stdio.h>

int main() {
    char *x;
    int a;
    x = (char *) &a;

    a = 512;
    x[0] = 1;
    x[1] = 2; 

    printf("%d\n",a); 

    return 0;
}

核心原因和字节序以及内存直接操作有关,拆解如下:

  • 首先明确两个前提:你的系统是小端字节序(绝大多数x86/x86_64架构的电脑都是这个),且int类型占用4个字节(当前主流系统的标准配置)。
  • 代码里char* x = (char*)&a的作用,是把int a占用的4字节内存,当成一个char数组来操作——x[0]对应a的最低地址字节,x[1]对应次低地址字节,以此类推。
  • 当执行a = 512时,512的十六进制是0x00000200。小端字节序的规则是整数的低字节存在内存低地址,所以a的4个字节在内存里的存储顺序是:低地址→高地址:0x00(x[0])、0x02(x[1])、0x00(x[2])、0x00(x[3])。
  • 接下来x[0] = 1把a的最低字节改成了0x01,x[1] = 2把次低字节设为0x02(和原数值一致,不影响结果)。
  • 现在a的内存字节变成了0x01、0x02、0x00、0x00。按照小端规则还原成整数,就是把字节从高到低组合成0x00000201,转换成十进制就是2*256 + 1 = 513,这就是最终输出的结果。

注:如果是大端字节序的系统,这段代码的输出会完全不同,但日常使用的PC基本都是小端架构,所以会得到513的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:55:18