十五、联合体(union)1、union语法

​ 联合体和结构体都是自定义数据类型 ,通过union可以创建一个联合体,union中的成员变量共享内存(即内存中有重叠的部分),因此union的数据类型大小由其最大的成员变量决定。

//联合体union语法union 联合体名称{    变量类型 变量名称;    变量类型 变量名称;};//示例union USER        //联合体声明{    short sHP;    int nHP;};USER user;       //联合体使用user.sHP=200;

2、union的特点及使用

①union中任意一个成员变量的变动,都可能导致其他成员变量的值发生变化

②union变量的大小由其最大的成员变量决定

//union的使用#include union USER        //联合体USER类型的定义{    short sHP;    int nHP;    double fHP;};int main(){    USER user;   //声明一个联合体的变量,再没有初始化的情况下,值不好确定    std::cout << sizeof(user) << std::endl;   //显示的联合体的内存大小由其最大的类型决定    std::cout << &user.sHP << std::endl; //0113FA68    std::cout << &user.nHP << std::endl; //联合体的内存地址一致    std::cout << &user.fHP << std::endl; //0113FA68    user.sHP = 100;    std::cout << user.sHP << std::endl;   //只初始化了sHP,所以nHP的值是随机的    std::cout << user.nHP << std::endl;    user.nHP = 0;                       //一旦联合体中的某个成员变量值发送变化,那么有可能会影响其他的成员变量也发生变化    user.sHP = -1;    std::cout << user.sHP << std::endl;    std::cout << user.nHP << std::endl;}

3、匿名联合体和结构体

​匿名联合体和结构体即没有名字的联合体和结构体:

//匿名联合体#include struct MyStruct{union                 //没有类型名称的联合体{int Mp;int Hp;} ls;              //使用一个临时变量} ;int main(){MyStruct A;A.ls.Hp = 200;std::cout << A.ls.Hp << std::endl;}