联合类型和结构体类型基本相似,包括定义方式,声明方式都是一样的。
关键字 union
#include <stdio.h> #include <stdlib.h> union Un { char c; short s; int i; }un1,un2; int main(void) { system("pause"); return 0; }
union 的特点是所有的成员共享一块内存。对比struct 的每一个成员都有自己的一块内存。
union它的内存模型是 □□□□
c的空间放在第一个字节,s的空间放在前两个字节,c的空间和s的空间是从起始地址重合。i也是从第一个空间开始放。
所以4个字节的空间,放下了 c,s,i。
这种存放空间的特点是 :当修改c的时候,第一个字节内的内容就被改变了, 别忘了 第一个字节的内容同样也是s,i的一部分内容。所以当你修改c的时候,s和i的数值也被改变了。
所以 只要修改一个成员,其他成员也会改变。
声明联合变量并初始化
声明很简单,主要说一些初始化。
联合的初始化也有特点,因为它其中的所有的成员是共用一块内存,因此初始化的时候不能够对三个数据进行初始化。
联合的初始化只能初始化一个成员,初始化最大的成员。
#include <stdio.h> #include <stdlib.h> union Un { char c; short s; int i; }un1; int main(void) { union Un un2 = { 34 };//初始化哪个都行,因为初始化任意一个,其他部分自动初始化为0。 system("pause"); return 0; }
想初始化哪个成员,就把哪个成员放在union中的最前面。