一道题明白什么是共用体
- 2019 年 11 月 21 日
- 笔记

关于共用体(联合体)的概念,感觉很多同学还是不够清楚的。上面这个全国二级C的选择,难度不大,但能很好的帮助我们理解这个概念。
正确答案是D。
为了便于理解,我们最后加了行代码(最后注释掉的代码)。运行,输出三个值。

经常会听到同学讲共用体某个成员存在,另一个不存在,一个成员的值覆盖了另一个成员,这些都是不准确的。共用体讲的就是成员共用存储空间的,涉及到不同成员与该共用体所占存储空间的对应关系。
大家应该都知道,结构体变量占的空间大小等于每个成员所占空间大小之和,共用体变量占的空间大小等于所有成员里面占空间最大的那个。
对于题目中共用体a的两个成员u、k,u有三个int类型的成员共占12字节,k只占4字节,所以总归给a分配了12字节的空间。下图展示了成员与这12字节空间的对应关系。

我们把这12字节分成3块,每块4字节。对于成员u,它的三个成员分别对应这3块。对于成员k,它只需要4字节,也就是第一块,和x是同一块。所以给k赋值,就相当于给x赋值了。
类似的,如果k是double类型,占8个字节,那k对应x、y两块,给k赋值会影响到x、y,具体x、y的值要看k前后4个字节分别是什么值。当然一般不会让大家计算这么复杂的情况。