一、前言
你见过一个联合吗?假如我们以弓箭手值班为例,他们轮流值班,而不是一齐值班,这就是一个联合体。
二、正文
(一)定义
在说道联合体union
的时候,就不得不回忆一下结构体struct
了,它的定义是这样的
struct Node {
int num;
char sex;
float score;
};
在定义联合体时也一样,只不过关键字struct
要改为union
,就像这样
union Node {
int num;
char sex;
float score;
};
(二)struct和union占用大小
随后我们来使用运算符sizeof()
来获取一下它的占用大小
可能这是你会感觉疑惑:“4+1+4不是等于9吗?怎么输出12呢?”不,这一点也不怪。在c++中,struct
为了好操作,因此存在对齐特性。第一个变量没有偏移量,因此是0,第二个变量的偏移量等于第一个变量的偏移量+第一个变量的大小,同时,偏移量必须是自己的大小的倍数,如果不是,那么要找出下一个4的倍数。第三个变量的偏移量等于第二个变量的偏移量+第二个变量的大小,也必须是第三个变量大小的倍数……最终计算结构体大小,就是第四个变量的偏移量+第四个变量的大小
struct Node {
int num;
//偏移量:0
char sex;
//偏移量:0+4=4
float score;
//偏移量:4+1=5(必须是它的大小4的倍数,所以应该是8)
};
//最终计算结构体大小,等于第三个变量的偏移量+它的大小:8+4=12