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]的起始内存地址完全相同:
- 执行
z.i[0] = 0x39后,i[0]对应的4字节内存被写入十六进制值0x39(十进制57)。 - 现代计算机大多采用小端字节序,即多字节数据的低字节存在内存低地址。
unsigned char c只占用内存的第一个字节,所以会读取到0x39这个值。 0x39对应的ASCII字符是'9',因此printf("%c\n", z.c)会输出9。
内容的提问来源于stack exchange,提问作者wodebgm
相关产品推荐
相关产品推荐

