什么是枚举
枚举是 C 语言中的一种基本数据类型
可以让数据更简洁,更易读。
枚举顾名思义就是 一 一 列举。
把可能的取值 一 一列举。
比如我们现实生活中:
- 一周的星期一到星期日是有限的7天,可以一一列举。
- 性别有:男、女、保密,也可以一一列举。
- 月份有12个月,也可以一一列举
这里就可以使用枚举了。
枚举类型的定义
enum Day//星期 { Mon, Tues, Wed, Thur, Fri, Sat, Sun }; enum Sex//性别 { MALE, FEMALE, SECRET }; enum Color//颜色 { RED, GREEN, BLUE };
以上定义的 enum Day , enum Sex , enum Color 都是枚举类型。
{ }中的内容是枚举类型的可能取值,也叫 枚举常量 。
这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。
例如:
enum Color//颜色 { RED=1, GREEN=2, BLUE=4 };
当然如果给前面某个枚举常量赋值了,后面的枚举常量也会从赋值的常量开始 递增1 如:
下面代码的结果是:( ) enum ENUM_A { X1, Y1, Z1 = 255, A1, B1, }; enum ENUM_A enumA = Y1; enum ENUM_A enumB = B1; printf("%d %d\n", enumA, enumB)
枚举默认从0开始,所以X1是0,故Y1是1,给了数字后会根据数字向后推,那么Z1是255,A1是256,所以B1是257.
枚举的优点
- 增加代码的可读性和可维护性
- 和#define定义的标识符比较枚举有类型检查,更加严谨。
- 防止了命名污染(封装)
- 便于调试
- 使用方便,一次可以定义多个常量
#define 宏命令虽然能解决问题,但也带来了不小的副作用,导致宏名过多,代码松散,看起来总有点不舒服。C语言才提供了一种枚举(Enum)类型,能够列出所有可能的取值,并给它们取一个名字。
枚举的使用
只能拿枚举常量给枚举变量赋值,才不会出现类型的差异。
C语言对类型检查不够严格(可能不会报错)
换成C++就不行了,必须遵守这个规则。
enum Color//颜色 { RED = 1, GREEN = 2, BLUE = 4 }; int main() { enum Color clr = GREEN; printf("%d", clr); return 0; }
输出结果为2
在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。
不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。
以下实例使用 for 来遍历枚举的元素:
enum DAY { MON = 1, TUE, WED, THU, FRI, SAT, SUN } ; int main() { enum DAY day; // 遍历枚举元素 for (day = MON; day <= SUN; day++) { printf("枚举元素:%d \n", day); } system("pause"); return 0; }
最终输出结果:
枚举元素:1
枚举元素:2
枚举元素:3
枚举元素:4
枚举元素:5
枚举元素:6
枚举元素:7