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

C语言共用体疑问:为何a.i输出'A'的ASCII值而非默认0?

共用体成员值关联的原因解析

这事儿的核心在于共用体(union)的内存共享特性,咱们一步步拆解:

  • 共用体的所有成员共用同一段内存空间,它们的起始内存地址完全相同,整个共用体的大小等于其中占用内存最大的成员的大小。比如你定义的这个共用体,假设系统里int和float占4字节、char占1字节,那整个共用体就占4字节,a.i、a.ch、a.f都从这4字节的起始地址开始读写。
  • 当你给a.ch赋值'A'时,其实是在共用体的起始1字节内存中写入了'A'的ASCII码值——也就是二进制的0x41(十进制65)。
  • 之后读取a.i时,程序会把这块共用内存的内容(从起始地址取4字节,低1字节是0x41,高3字节要么是内存残留值要么是0,取决于初始化情况)当作整数来解析。不管是小端还是大端系统,最终解析出的整数值都会是65,所以输出printing a.i: 65。
  • 至于你疑惑的“为什么不是默认值0”:共用体本身不会自动给成员初始化默认值,而且你已经通过赋值a.ch修改了共用内存的内容,a.i读取的是被修改后的内存数据,自然不是0。

所以结论是:完全和访问/赋值a.ch有关——共用体的内存共享机制导致修改一个成员后,其他成员读取的是同一块内存的内容,自然会呈现出关联的数值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:23:26