十五、联合体(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;}