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

联合体声明中对象值异常咨询:为何z值不符合预期?

问题原因解析
  • 联合体的核心特性是所有成员共享同一块内存空间,整个联合体的内存大小等于其最大成员的尺寸(这里int z占4字节,因此union u1整体为4字节)。
  • 当执行A.x=3时,仅修改了联合体内存的第一个字节(char类型占1字节),剩余3个字节属于未初始化状态,存储的是程序运行时的随机垃圾值。
  • 打印A.y时,short int占2字节,它读取的是内存的前两个字节:第一个字节值为0x03(对应十进制3),第二个字节的垃圾值恰好为0x00,因此y的结果为3。
  • 打印A.z时,int占4字节,它会读取全部4个字节:第一个字节是0x03,后面三个字节的垃圾值组合为0x400000(对应十进制4194304),二者相加得到4194307。

若想让z的值也为3,直接给z赋值即可(A.z=3)。因为联合体中只有最后被赋值的成员能保证其对应的所有内存字节被覆盖,其他成员的值完全依赖当前内存的实际内容,无法保证与已赋值成员一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:33:32