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