共用体(Union),定义格式为:
union 共用体名
{
成员列表
}; //共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。
结构体和共用体的区别:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。
结构体占用的内存讲解:
内存对齐的规则
1.起始地址为该变量类型所占内存的整数倍,若不足则不足部分用数据填充至所占内存的整数倍。
2.该结构体所占总内存为结构体成员变量中最大数据类型的整数倍。
结构体占用内存规则2可以很明显告诉我们结构体所占内存并非简单的所有成员总和,可以举个简单例子说明
例:
struct str1
{
char a;
int b;
float c;
double d;
};
如上代码,a占4个字节,b占四个字节,c占四个字节,加上d占八个字节,总和为:20个字节,但是实际上sizeof一下这个结构体会得到该结构体大小为24个字节
用于所有成员所占用的内存总和(成员之间可能会存在缝隙,不同成员之间大小不同,但是系统给结构体请求内存的时候是),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术