目录
前言
本篇文章我们来讨论自定义类型:联合。
1、联合的定义
union Un
{
int a;
int c;
};
如此定义出一个联合体。
2、联合体特点
联合体的大小:
定义的联合体 union Un,它的大小为:4
明明联合体里面放了两个int类型的变量,按理说两个int类型应该占8个字节,最后却只有4字节的大小。这是为什么呢?
其实这就是联合体的特别之处,也是它和结构体的区别,联合体内的变量会共用一块空间,比如例子里面联合体内两个变量a和c,他们其实在内存中只占了4字节,共用那四个字节的空间。
注意:这个空间至少是联合体内占最大空间的类型大小。
这样做可以应用在什么情况呢?
例如:我们有两个变量,我们能够肯定用到其中一个的时候用不到另外一个,这时候就可以用联合体将这两个变量定义在同一块空间中。
3、联合体大小计算
联合体在计算大小时,存在对齐,并不一定是联合体内最大数据的空间大小:
联合体的大小至少时最大成员的大小。
当最大成员大小不是最大对齐数大小的整数倍的时候,就要对齐到最大对齐数的整数倍数。
例如:
union Un1
{
char c[5];
int i;
};
这个联合体,定义了一个大小为5的字符串和一个大小为4的整型,最后这个联合体的大小为几呢?
答案是:8。因为对于这里面最大的数据c来说,他有5字节大小,但是根据对齐原则,整个联合体的大小必须是对齐数的整数倍,对齐数在这里为4(详细讲解可以看我写的关于结构体的讲解文章),因此整个联合体的大小就为8。
总结
联合体的内容就讲到这里,希望对大家有所帮助。