(三)知识准备
在实际应用中,有的变量只有几种可能取值。如人的性别只有两种可能取值、星期只有7种可能取值。在C语言中,可以将这样取值比较特殊的变量定义为枚举类型。所谓枚举,是指将变量的值一一列举出来,只限于在列举出来的值中取值。如:
以上声明了一个枚举类型enum Weekday。花括号中的mon、tue、wed、thu、fri、sat、sun称为枚举元素或者枚举常量。它们是用户指定的名字。
用枚举类型定义变量,例如:
其中,workday被定义为枚举变量。枚举变量的特殊之处:枚举变量的值只限于花括号中指定的值之一。
声明枚举类型的一般形式:
其中,枚举成员列表以逗号“,”分隔。 或者:
其中,枚举名遵循标识符命名规则。
如同结构体(struct)一样,枚举变量也可用不同的方式说明,即先定义后说明、同时定义说明或直接说明。设有变量a、b、c被说明为上述的weekday,可采用下述任一种方式:
枚举常量的值如下。
例如:
该枚举名为Weekday,枚举值共有7个,即一周中的7天。
像上面那样,当不写对应的值时,枚举值默认从0开始,即等同于:
当然,也可以像这样简写:
这样枚举值就会从0开始递增,和上面的写法是一样的。
用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明:
在程序中可以直接使用某个枚举中的枚举元素,从而大大增加程序的可读性。例如:
说明:
① 在C编译器中将枚举元素按常量处理,因此也称为枚举常量(注意:不能对枚举元素进行赋值)。
② 枚举元素作为常量,它是有值的,C语言编译时,按定义时的顺序使值为0,1,2,3,…。也可以改变枚举元素的值,在定义时直接指定元素的值。
③ 枚举值可以用来做比较判断,枚举值的比较规则是按其在定义时的顺序号进行比较。如果定义时未人为指定,则第一个枚举元素的值默认为0。
④ 一个整数不能直接赋给一个枚举常量,它们属于不同的类型,应先进行强制类型转换才能赋值。
⑤ 内存的分配。enum是枚举型,所占内存空间恒为4字节。
⑥ 不能定义同名的枚举类型。
⑦ 不能包含同名的枚举成员。