union和enum使用

来源:互联网 发布:程序员输入法技巧 编辑:程序博客网 时间:2024/06/02 06:05

一、联合(union)

1.定义

联合与结构相似,也可以容纳不同类型的值,但每次只能存一个值,若在容纳另一个值将会把前面的值覆盖调(即:多个变量使用同一个内存空间,但内存空间只有1个,所以要这些变量在不同时间用才行)

2.结构

union mima//这里和结构体类似,就是吧struct改为union
{
unsigned long birthday;
unsigned short ssn;
char *pet;
};
mima mima_1;//创建该联合类型的变量

//对结构成员进行赋值
mima_1.birthday=19980105;

//然后再执行下面语句(这里是验证联合类型只能存一个值,否则会被覆盖)
mima_1.pet=”xxx”//执行这个语句时会把birthday成员的值丢弃

3.举例

#include <iostream>using namespace std;union mima{    unsigned long birthday;    unsigned short ssn;    char *pet;};int main(){    mima mima_1;    mima_1.birthday=19980105;    cout<<mima_1.birthday<<"\n";    mima_1.pet="xxx";    cout<<mima_1.pet<<"\n";    cout<<mima_1.birthday<<"\n";//这个的值已经被覆盖,输出的是它在内存中的地址    return 0;}//19980105//xxx//4751362
  • 1

4.总结

1.为了节省空间时使用联合类型(只提供一个内存)
2.使用不同方式解释数据时不用强制转换时也可以用联合类型


二、枚举(enum)

1.定义

枚举(enum)类型用来创建一个可取值的列表

2.用法(结构)

enum weekdays{Monday,Tuesday,Wednesday,Thursday,Friday};

//下面创建该类型的变量
weekdays today;
//下面方式对它赋值
today Thursday;//注意Monday,Tuesday…这些并不是字符串,而是从0开始的值,变量的赋值只能出现在上面五个元素中

3.举例

#include <iostream>using namespace std;int main(){    enum weekdays{Monday,Tuesday,Wednesday,Thursday,Friday};//这些值不是字符串,默认Monday为0,Tuesday为1......     weekdays today;    today=Monday;    cout<<today<<"\n";    today=Tuesday;    cout<<today<<"\n";     return 0;}//结果是0,1
  • 1
  • 若将Monday赋值为1
#include <iostream>using namespace std;int main(){    enum weekdays{Monday=1,Tuesday,Wednesday,Thursday,Friday};    weekdays today;    today=Monday;    cout<<today<<"\n";    today=Tuesday;    cout<<today<<"\n";     return 0;}//结果是1,2
  • 1

4.总结

1.它可以对变量的可取值加以限制(比如本来枚举定义为Monday,若后面写成Monday1,是不实现的)
2.它可以用作switch条件语句的case标号(因为字符串不能作为case的标号用)(小技巧)

这里写图片描述

原创粉丝点击