想法简友广场C++学习笔记

第四章 复合类型(5)共用体与枚举

2019-12-03  本文已影响0人  阿厉a_li

(五)共用体与枚举

1.共用体(union)

    共用体是一种数据格式,它能够存储不同的数据类型,但在同一时刻只能存储其中的一种类型。声明与结构类似,关键字是union。由于共用体每次只能存储一个值,因此它必须有足够的空间来存储最大的成员,所以,共用体的长度为其最大成员的长度。

    共用体使用起来和结构也是类似的,比如union a{int a1;double a2;};声明了一个共用体类型,a example;声明了一个共用体example,example.a1=3;此时example.a1就是一个int类型,而example.a2是没有意义的。example.a2=3.44;来赋值,此时example.a1是没有意义的,可以说共用体内的成员在同一时间只有一个是有意义的,这也是共用的含义之所在。

    可以声明匿名共用体,也就是共用体没有名称,通常类型名称也没有,比如union {int a1;double a2};(通常是在结构内声明的),这样共用体的成员被看成是结构体的成员,它们的地址相同(也就是a1和a2可以看成是结构体的成员,而他们只能一次使用一个)。而因为是共用体,因此共用体的成员只可在同一时间使用一个。

   共用体常用于节省内存,这在某些嵌入式编程中是非常有利的。

2.枚举

(1)枚举是什么

    枚举是只能赋值给它特定值的一种自定义的数据类型,是另一种创建符号常量的方式,命令符号是enum,定义和结构,共用体相似,创建举例:enum spectrum {red,blue,yellow,violet,green}。这样创建的枚举类型spectrum,只能有大括号里面的那些取值,red,blue等成为了符号常量,叫作枚举量,对应着0-4五个值,可以显式地用指定值来覆盖默认值。定义了枚举类型之后,就可以使用枚举类型来创建枚举变量,比如spectrum aa,就创建了一个枚举变量aa。

(2)给枚举变量赋值的时候,只能赋值给他定义时定义的那些值。

    对于枚举,只定义了赋值运算符,枚举并没有专用的运算符,但是如果我们用运算符来计算它也是可以的,此时枚举值被自动转换成了int类型。但是int类型赋值给枚举类型就会出现错误,比如上面的aa=red;是可以的,red+blue也是有效的表达式,但是aa=red+blue是不允许的,因为不能将int类型赋值给枚举类型。

    如果int值是有效的,则可以通过强制类型转换,将它赋给枚举变量:比如

band = spectrum (3) ;       //typecast 3 to type spectrum

(3)如果打算只使用常量,而不创建枚举类型的变量,则可以省略枚举类型的名称

    如下面的例子所示:

    enum { red, orange, yellow , green, blue , violet , indigo, ultraviolet };此时red实际为0,indigo实际为6。

    实际上,枚举更常用来定义相关的符号常量而不是新类型,比如可以用枚举来定义swich语句中使用的符号常量。

(4)设置枚举量的值

    可以使用赋值运算符显式地设置枚举量的值

    enum bits{one = 1, two = 2, four = 4, eight = 8};也可以只显式地设置一部分的值,那么后面未设置值的量的值将比前面的值依次加一。如果需要的话,也可以创建值相同的枚举量。

上一篇 下一篇

猜你喜欢

热点阅读