最近又在学习PHP的源代码,发现c的结构体与共同体使用广泛,所以来学习一下。
共同体可以认为是C中的一种结构,像int / char / short 等是基本类型,而union更像是php的数组,可以存放多种不同类型的字段。
三个规则
- 成员共享结构内存,也就是成员的内存开始地址相同
- 结构总占用内存大小为最大占用内存成员决定,其值为满足所有成员内存对齐后的值
- 修改其中某个成员的之后,会影响其他成员的值
定义
#include int main(){ // 定义一个union union Team { int total; // int 占四个字节 char members[5]; // char 占一个字节 }; union Team team; // sizeof Team is 8 printf("sizeof Team is %lu ", sizeof(union Team));}
gcc uniontest.c -o uniontest.out./uniontest.out
当我们执行后发现,Team的大小为8字节,这是为啥呢
这里是因为存在内存