在实际的编程应用中,有的变量只有几种可能的取值,譬如说一个星期的七种可能,性别的两种可能等等。C语言为这种类型的变量的定义提供了enum关键字。
要使用枚举类型的变量,首先需要先定义一个枚举类型名,然后再声明该变量是枚举类型的
例1:
enum WEEKDAY{ \\该语句定义了一个枚举类型 MONDAY = 1, TUSEDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY};enum WEEKDAY day; \\该语句声明了一个枚举类型的变量
上述例子中的MONDAY、TUSEDAY等称为枚举元素或枚举常量(本人更倾向于称其为枚举常量,因为这样可以反映其性质),它们是用户自定义的标识符而已。
在没有显式说明的情况下,枚举类型中的第一个枚举常量的值为0,第二个为1,以此类推。如果只指定了部分枚举常量的值,那么未指定值的枚举常量的值将依着最后一个指定值向后递增(步长为1)
不同枚举类型中的枚举常量的名字必须互不相同。同一枚举类型中的不同的枚举常量可以具有相同的值
枚举类型为建立常量值与标识符之间的关联提供了一种便利的方式。相对于#define语句来说,它的优势在于常量值可以自动生成
尽管可以声明枚举类型的变量,但编译器不检查这种类型变量中存储的值是否为该枚举类型中的有效值,不过,枚举类型的变量提供这种检查
注意:
不能对枚举常量进行赋值操作(定义枚举类型时除外)
枚举常量和枚举变量可以用于判断语句,实际用于判断的是其中实际包含的值
一个整数不能直接赋值给一个枚举变量,必须用该枚举变量所属的枚举类型进行类型强制转换才行
使用常规的手段输出无法输出枚举常量所对应的字符串,因为枚举常量为整型值
在使用枚举变量的时候,我们不关心其值的大小,而是其表示的状态
例2:
enum WEEKDAY{ MONDAY = 1, TUSEDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY};
注意点:
枚举常量之间用逗号隔开,最后一个枚举常量之后不需要逗号
整个枚举类型定义语句的最后需要一个分号
WEEKDAY是该枚举类型的名字,这是一个可选项
1、定义枚举类型后声明枚举变量
enum WEEKDAY{ MONDAY = 1, TUSEDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY};int main(int argc, char ** argv){ enum WEEKDAY day; day = MONDYA; return 0;}2、定义枚举类型的同时声明枚举变量
enum WEEKDAY{ MONDAY= 1, TUSEDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}day;int main(int argc, char ** argv){ day = MONDYA; return 0;}3、定义枚举类型的同时利用typedef关键字将其声明为类型别名,然后利用该类型别名声明枚举类型变量
typedef enum WEEKDAY{ MONDAY = 1, TUSEDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY}WEEKDAYS;int main(int argc, char ** argv){ WEEKDAYS day = MONDYA; return 0;}