联合类型和结构体类型基本相似,包括定义方式,声明方式都是一样的。

关键字 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中的最前面。

 

 posted on 2019-03-16 16:29  轻舞飞扬的饼  阅读(190)  评论(0编辑  收藏  举报