鱼C论坛

 找回密码
 立即注册
查看: 2312|回复: 0

[技术交流] C++(11th) :union, enum

[复制链接]
发表于 2021-2-8 18:24:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 一叶枫残 于 2021-2-9 19:53 编辑

联合

联合类型的定义方式与创建和结构体类型一样,只不过把 struct 改为 union
对于联合类型,可以创建不同的类型的变量,但它们的地址相同,意味着他们之中有一个的值发生改变,其余变量储存的值也会发生改变;
  1. #include <iostream>

  2. using namespace std;

  3. union IFT
  4. {
  5.         int it;
  6.         char c;
  7.         float flt;
  8. };

  9. int main()
  10. {
  11.         IFT ift_1;
  12.        
  13.         cout << "ift_1.it的地址:" << &( ift_1.it )        << endl;
  14.         cout << "ift_1.c的地址:" << (void*)&( ift_1.c ) << endl;
  15.         cout << "ift_1.flt的地址:" << &( ift_1.flt ) << endl << endl;
  16.        
  17.         ift_1.it = 54;
  18.         cout << "ift_1.it:" << ift_1.it        << endl;
  19.         cout << "ift_1.c:" << ift_1.c << endl;
  20.         cout << "ift_1.flt:" << ift_1.flt << endl << endl;
  21.        
  22.         ift_1.c = '3';
  23.         cout << "ift_1.c:" << ift_1.c << endl;
  24.         cout << "ift_1.it:" << ift_1.it << endl;
  25.         cout << "ift_1.flt:" << ift_1.flt << endl;
  26.        
  27.         return 0;
  28. }
复制代码
  1. ift_1.it的地址:0x70fe00
  2. ift_1.c的地址:0x70fe00
  3. ift_1.flt的地址:0x70fe00

  4. ift_1.it:54
  5. ift_1.c:6
  6. ift_1.flt:7.56701e-044

  7. ift_1.c:3
  8. ift_1.it:51
  9. ift_1.flt:7.14662e-044
复制代码

在赋值给变量c之后,it的值发生了改变,变为3的ascii码,这就是地址相同造成的结果,同时flt的值也发生了影响(即使没有被赋值过);

枚举类型

定义枚举类型使用enum,后面空格跟类型名以及中括号里面的值,创建枚举类型与创建联合类型和结构体一样,使用类型名加变量名,这个变量名只能取中括号里面的值(取其他值会报错);
  1. #include <iostream>

  2. using namespace std;

  3. int main()
  4. {
  5.         enum mood{ happy , sad , angry};
  6.        
  7.         mood me;
  8.         me = sad;
  9.         cout << "me:" << me << endl;
  10.        
  11.         me = angry;
  12.         cout << "me:" << me << endl;
  13.        
  14.         return 0;
  15. }
复制代码
  1. me:1
  2. me:2
复制代码

枚举类型的输出结果为在中括号内的排名顺序,从0开始,赋值时如sad不用加双引号;

同时,中括号里的类型可以直接输出,我们在上面程序加上
  1. cout << "happy:" << happy << endl;
复制代码

输出结果为
  1. happy:0
复制代码

枚举类型可以配合swich语句使用;


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-5-1 22:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表