目录
- 前言
 - 枚举类型
 - 1.枚举类型的声明
 - 2.枚举类型的优点
 - 3.枚举类型的使⽤
 
- 总结
 
前言
这期我们来学习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语言中的枚举,理解起来较为简单,主要让大家在今后的过程中看的懂代码;下期见。



















