自定义类型
自定义类型一共只有三种:
1.结构体类型
2.枚举类型
3.联合类型
枚举类型
- 如果一个变量只有几种可能的值,则可以定义为枚举类型,所谓“枚举”就是把可能的值 一 一 列举出来,变量的值只限于列举出来的值得范围内
- 声明枚举类型用enum开头
枚举类型的声明与定义
枚举类型的声明:
enum Weekday{
sun, //周日
mon, //周一
tue, //周二
wed, //周三
thu, //周四
fri, //周五
sat //周六
};
enum sex{
male,
female
};
定义变量:
enum Weekday workday,weekend; //定义两个Weekday类型的枚举变量
enum sex human; //定义一个sex类型的枚举变量
以上定义的enum Weekday , enum sex都是枚举类型
{ }中的内容是枚举类型的可能取值,也叫枚举常量
这些可能值都是可以赋值的,默认赋值是从0开始,以1递增,在定义时可以赋值
enum sex{
male,
female
};
enum sex s1 = male;
enum sex s2 = female;
printf("%d %d\n", s1, s2); // 0 1
enum sex{
male,
female = 3
};
enum sex s1 = male;
enum sex s2 = female;
printf("%d %d\n", s1, s2); //0 3
enum sex{
male = 4,
female
};
enum sex s1 = male;
enum sex s2 = female;
printf("%d %d\n", s1, s2); //4 5
不建议这种赋值,会导致编译器分不清male和female
enum sex{
male ,
female = 0
};
enum sex s1 = male;
enum sex s2 = female;
printf("%d %d\n", s1, s2); //0 0
枚举的优点
#define也可以定义常量,为什么我们要使用枚举来定义常量?
枚举优点:
1.增加代码的可读性和可维护性
2.枚举有类型检查,更加严谨
3.防止命名污染(封装性)
4.使用方便,一次性可以定义多个常量
枚举的使用
enum Color{
RED = 1,
GREEN = 3,
BLUE = 5
};
enum Color color1 = RED; //合法,定义并初始化枚举常量
color1 = 5; //非法,错误信息: 无法从“int”转换为“sex”
由上述测试代码可知,枚举类型变量的值只能是枚举类型中的值,不可以是其他任何值