本文主要是介绍sizeof计算联合体大小,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
引言:本篇文章有一部分是在sizeof计算结构体大小的基础上进行说明的
1.联合体union特性
- 联合体所有成员变量共享内存,相对于联合体首地址偏移量都为0
- 同一时间只能存储1个被选择的变量,对其他成员变量赋值会覆盖原变量
2.联合体大小计算准则
- 联合体大小要至少能容纳最大的成员变量
- 联合体大小要是所有成员变量类型大小的整数倍
3.例子
typedef union u
{ char a;int b[5];double c;int d[3];
}U;
typedef struct s
{ int e; double f; short g; U h; char i[2];
}S;
- U大小至少要容纳最大的b[5]=4*5=20字节,同时要是变量类型最大值得整数倍,即sizeof(double)=8的整数倍,所有sizeof(U)=24
- s的大小计算需要看上一篇关于结构体大小的计算的文章sizeof计算结构体大小,联合体的自身对齐值为成员变量的最大对齐值,也就double的自身对齐值8,所以s得大小为0+4+4+8+2+6+24+2+6=56
这篇关于sizeof计算联合体大小的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!