(二十一)联合体(union)

一、前言

你见过一个联合吗?假如我们以弓箭手值班为例,他们轮流值班,而不是一齐值班,这就是一个联合体。

二、正文

(一)定义

在说道联合体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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值