枚举类型的使用

来源:互联网 发布:阿里云ecs 微信公众号 编辑:程序博客网 时间:2024/05/23 11:30

枚举类型对学过编程的人而言可谓是既熟悉又陌生,各种语言的教材上都有对枚举类型的介绍,但是真正用过的人可能不多。

我也是因为工作之后才接触到枚举类型的使用,这时候才知道自己一直对枚举类型都是一知半解,今天通过查阅资料加深了对枚举类型的了解,现将其记录如下。

1.什么是枚举类型

我的理解是枚举类型就是对整型数据起一个别名,这个别名可以是各种字符,甚至汉字,但是不能是整数。一个大家都熟悉的例子:

enum COLOR{RED,BLUE,BLACK};

这里就是把整型0取别名RED,1取别名BLUE,2取别名BLACK;

也许大家注意到了,为什么三个成员分别对应0,1,2呢?是巧合吗?

不是巧合,枚举类型默认从整数0开始,分别与花括号中的各成员对应,而且整数值依次加1。当然也可以指定各别名对应的整型值,如下:

enum COLOR{    RED = 1,    BLUE,    BLACK,    WHITE = 5,    GREEN};

此时,RED为1,BLUE为2,BLACK为3,WHITE为5,GREEN为6。需注意:

enum num{0,1,2,3,4};

这种写法是错误的,因为枚举花括号中不能是数字。


2.为什么要使用枚举类型

使用枚举类型的目的是限制用户的输入为有限范围内的整数值,例如上面声明了COLOR的枚举,那么,当用户定义一个enum COLOR类型的变量时,该变量的值只能是花括号中的某一种颜色,给它赋值为其他都是错误的。这种特性很适合处理类似于状态机中的状态转换的情形,将所有的状态定义为一个枚举类型中的成员,并为其取合适的名字,会使得程序简单易懂,不易出错。


3.枚举类型的用法

我认为想要正确的使用枚举类型,必须要明确一点:枚举类型也是一种数据类型,也可以作为函数的返回值返回。举例说明如下:

enum weekday{mon,tue,wed,thu,fri,sat,sun};enum weekday Today = mon;

同样可以使用typedef定义enum weekday类型为Weekday,然后用Weekday声明变量,如下:

#include <stdio.h>#include <stdlib.h>typedef enum weekday{mon,tue,wen,tur,fri,sat,sun}Weekday;Weekday test_enum(){Weekday Today = mon;return Today;}int main(){printf("%d\n",test_enum());return 0;}

输出结果为0,



0 0