枚举类型对学过编程的人而言可谓是既熟悉又陌生,各种语言的教材上都有对枚举类型的介绍,但是真正用过的人可能不多。
我也是因为工作之后才接触到枚举类型的使用,这时候才知道自己一直对枚举类型都是一知半解,今天通过查阅资料加深了对枚举类型的了解,现将其记录如下。
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,
转载请注明本文地址: 枚举类型的使用