前言
这期我们来学习C语言的最后一个自定义类型——枚举,话不多说,正文开始:
枚举类型
1.枚举类型的声明
枚举顾名思义就是⼀⼀列举。
把可能的取值⼀⼀列举。
⽐如我们现实⽣活中:
⼀周的星期⼀到星期⽇是有限的7天,可以⼀⼀列举
性别有:男、⼥、保密,也可以⼀⼀列举
⽉份有12个⽉,也可以⼀⼀列举
三原⾊,也是可以意义列举
这些数据的表⽰就可以使⽤枚举了。
枚举关键字:enum
enum Color
{
//三原色的可能取值
RED,
GREEN,
BLUE
};
enum Sex
{
MALE,
FEMALE,
SECREL
};
以上定义的 enum Sex , enum Color 都是枚举类型
{}中的内容是枚举类型的可能取值,也叫 枚举常量 。
既然是常量我们就不能修改:
如果我们将其打印会默认是0-2:
enum Color
{
//三原色的可能取值
RED,
GREEN,
BLUE
};
int main()
{
/*enum Color color = RED;*/
printf("%d\n", RED);
printf("%d\n", GREEN);
printf("%d\n", BLUE);
return 0;
}
我们也可以在定义的时候修改这个默认值:
enum Color
{
//三原色的可能取值
RED = 4,
GREEN = 6,
BLUE= 8
};
int main()
{
/*enum Color color = RED;*/
printf("%d\n", RED);
printf("%d\n", GREEN);
printf("%d\n", BLUE);
return 0;
}
运行结果:
如果我们修改部分值,打印的会是什么值?
enum Color
{
//三原色的可能取值
RED,
GREEN = 6,
BLUE
};
int main()
{
/*enum Color color = RED;*/
printf("%d\n", RED);
printf("%d\n", GREEN);
printf("%d\n", BLUE);
return 0;
}
运行结果:
综上所诉,也就是将可能的值统一放一起,然后有个常量可以代表他:
那是不是和我们之前学的#define有点相似了,两者的区别在哪?我们往后看;
2.枚举类型的优点
为什么使⽤枚举?
我们可以使⽤ #define 定义常量,为什么⾮要使⽤枚举?
枚举的优点:
- 增加代码的可读性和可维护性
我们来举一个我们之前做的计算器的菜单例子:
void menu()
{
printf("****************************************\n");
printf("*********1.add ******* 2.sub ********\n");
printf("*********3.mul ******* 4.div ********\n");
printf("*********0.exit *********************\n");
printf("****************************************\n");
}
int main()
{
int input = 0;
scanf("%d", &input);
switch (input)
{
case 1:
break;
case 2:
break;
case 3:
break;
case 4:
break;
default:
break;
}
}
有了枚举后我们可以直接这样写:
enum option
{
EXIT, //0
ADD, //1
SUB, //2
MUL, //3
DIV //4
};
void menu()
{
printf("****************************************\n");
printf("*********1.add ******* 2.sub ********\n");
printf("*********3.mul ******* 4.div ********\n");
printf("*********0.exit *********************\n");
printf("****************************************\n");
}
int main()
{
int input = 0;
scanf("%d", &input);
switch (input)
{
case ADD:
break;
case SUB:
break;
case MUL:
break;
case DIV:
break;
default:
break;
}
}
大大提高了我们对代码的可读性和可维护性;
- 和#define定义的标识符⽐较枚举有类型检查,更加严谨。
我们这里用c语言和c++做个对比:
- 便于调试,预处理阶段会删除 #define 定义的符号
在预处理的时候就已经将所有的define定义的符号就替换成了值
- 使⽤⽅便,⼀次可以定义多个常量
这个在刚刚的例子大有提现;
- 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤
3.枚举类型的使⽤
enum Color//颜⾊
{
RED=1,
GREEN=2,
BLUE=4
};
enum Color clr = GREEN;//使⽤枚举常量给枚举变量赋值
那是否可以拿整数给枚举变量赋值呢?在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐较严格。(上面的优点的第二点已体现出来)
总结
这就是C语言中的枚举,理解起来较为简单,主要让大家在今后的过程中看的懂代码;下期见。