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

C语言新手咨询:指定union类型的内存占用字节数

C语言联合体内存占用及代码输出解析

一、联合体的内存大小计算

联合体的核心特性是所有成员共享同一块内存空间,其占用字节数遵循两个规则:

  • 至少等于最大成员的大小
  • 需满足系统的内存对齐要求(对齐到最大基本类型成员的字节数)

你的代码里,联合体pw的两个成员:

  • unsigned char c:占用1字节
  • unsigned int i[4]:每个unsigned int占4字节,4个元素的数组总大小为 4×4=16 字节

这里最大成员是数组i[4],大小16字节。同时,系统对unsigned int的对齐要求是4字节,16是4的整数倍,无需额外补齐。所以这个联合体类型的大小是16字节。

二、代码中printf的输出结果分析

因为联合体成员共享内存,z.c和z.i[0]的起始内存地址完全相同:

  1. 执行z.i[0] = 0x39后,i[0]对应的4字节内存被写入十六进制值0x39(十进制57)。
  2. 现代计算机大多采用小端字节序,即多字节数据的低字节存在内存低地址。unsigned char c只占用内存的第一个字节,所以会读取到0x39这个值。
  3. 0x39对应的ASCII字符是'9',因此printf("%c\n", z.c)会输出9。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 13:17:34