C语言自定义类型:枚举


前言

这期我们来学习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 定义常量,为什么⾮要使⽤枚举?

枚举的优点:

  1. 增加代码的可读性和可维护性

我们来举一个我们之前做的计算器的菜单例子:

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;
	}
}

大大提高了我们对代码的可读性和可维护性;

  1. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。

我们这里用c语言和c++做个对比:

在这里插入图片描述
在这里插入图片描述

  1. 便于调试,预处理阶段会删除 #define 定义的符号

在预处理的时候就已经将所有的define定义的符号就替换成了值

  1. 使⽤⽅便,⼀次可以定义多个常量

这个在刚刚的例子大有提现;

  1. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤

3.枚举类型的使⽤

enum Color//颜⾊
{
 RED=1,
 GREEN=2,
 BLUE=4
};
enum Color clr = GREEN;//使⽤枚举常量给枚举变量赋值

那是否可以拿整数给枚举变量赋值呢?在C语⾔中是可以的,但是在C++是不⾏的,C++的类型检查⽐较严格。(上面的优点的第二点已体现出来)


总结

这就是C语言中的枚举,理解起来较为简单,主要让大家在今后的过程中看的懂代码;下期见。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

比特在路上

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值