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

C++中reinterpret_cast转换int到short指针的结果困惑

问题原因:小端字节序的存储规则

这是因为你使用的64位MSVC环境基于x86/x64架构,该架构采用**小端字节序(Little Endian)**存储多字节数据,导致你通过short*读取到的是int变量的低2字节,而非你预想的高2字节。

具体分析:

  • 你定义的int num = 7,二进制表示确实是00000000 00000000 00000000 00000111(4字节)。但小端字节序的存储规则是:最低有效字节(数值的低位部分)放在内存的最低地址,最高有效字节放在最高地址。
  • 因此num在内存中的实际布局(从地址0000005E3DBEF7B0开始)为:
    地址 0000005E3DBEF7B0 → 00000111(第1字节,对应数值的低位)
    地址 0000005E3DBEF7B1 → 00000000(第2字节)
    地址 0000005E3DBEF7B2 → 00000000(第3字节)
    地址 0000005E3DBEF7B3 → 00000000(第4字节,对应数值的高位)
    
  • 当你通过reinterpret_cast<short*>(pold)得到pnew后,*pnew会从pold指向的起始地址读取2个字节,也就是上述的前两个字节。对于short类型(2字节),小端规则同样生效,这两个字节组合后的值为00000000 00000111,即十进制的7。
  • sizeof(*pnew)=2和sizeof(*pold)=4是完全正常的:short类型本身占用2字节,int类型在MSVC的64位环境下占用4字节,这是类型的固有属性,和指针转换操作无关。
  • 而*pold仍然为7,是因为你只是通过指针转换读取了原变量的部分字节,并未修改num的内存内容,所以原int变量的值保持不变。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:32:23