自学内容网 自学内容网

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语言中的枚举,理解起来较为简单,主要让大家在今后的过程中看的懂代码;下期见。



原文地址:https://blog.csdn.net/2303_78558007/article/details/142623132

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!