鱼C论坛

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

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

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

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

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

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

联合

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

using namespace std;

union IFT
{
        int it;
        char c;
        float flt; 
};

int main()
{
        IFT ift_1;
        
        cout << "ift_1.it的地址:" << &( ift_1.it )        << endl;
        cout << "ift_1.c的地址:" << (void*)&( ift_1.c ) << endl;
        cout << "ift_1.flt的地址:" << &( ift_1.flt ) << endl << endl;
        
        ift_1.it = 54;
        cout << "ift_1.it:" << ift_1.it        << endl;
        cout << "ift_1.c:" << ift_1.c << endl;
        cout << "ift_1.flt:" << ift_1.flt << endl << endl;
        
        ift_1.c = '3';
        cout << "ift_1.c:" << ift_1.c << endl;
        cout << "ift_1.it:" << ift_1.it << endl;
        cout << "ift_1.flt:" << ift_1.flt << endl;
        
        return 0;
 } 
ift_1.it的地址:0x70fe00
ift_1.c的地址:0x70fe00
ift_1.flt的地址:0x70fe00

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

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

枚举类型

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

using namespace std;

int main()
{
        enum mood{ happy , sad , angry};
        
        mood me;
        me = sad;
        cout << "me:" << me << endl;
        
        me = angry;
        cout << "me:" << me << endl;
        
        return 0;
}
me:1
me:2
枚举类型的输出结果为在中括号内的排名顺序,从0开始,赋值时如sad不用加双引号;

同时,中括号里的类型可以直接输出,我们在上面程序加上
cout << "happy:" << happy << endl; 
输出结果为
happy:0
枚举类型可以配合swich语句使用;


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 17:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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