当前位置:网站首页>C语言自定义类型——枚举类型讲解
C语言自定义类型——枚举类型讲解
2022-08-11 05:16:00 【云逸943】
一.枚举类型
定义:顾名思义就是一一列举,可以列举出所有常见的可能。每种可能都是常量,称为枚举常量!
把可能的取值一一列举。
比如我们现实生活中:
一周的星期一到星期日是有限的7天,可以一一列举;
enum day {
Mon=1,
Tues=2,
Wek=4,
Thes,
Fri,
Sat,
Sun
};
性别有:男、女,也可以一一列举;
enum Sex//性别
{
MALE,
FEMALE,
};
颜色也有多个,也可以一一列举。
enum Color//颜色
{
RED,
GREEN,
BLUE,
BLACK,
YELLOW,
PINK,
WHITE
};
两者的相同点:1.都需要关键字,结构体用struct,枚举用enum关键字;且都要写类型 名。
2.类型的最后使用分号完结。
枚举类型与结构体类型不同地方在于:
1.枚举中的成员每写一个都要用逗号分开,而结构体每个成员变量需要分号隔开;
2.枚举类型可以创建的时候就赋初值,而结构体需要在体外赋值。
根据两者区别的第二点,我们来演示一下枚举类型赋值情况:
1.默认赋值
enum Color1//颜色
{
RED,
GREEN,
BLUE,
BLACK,
YELLOW,
PINK,
WHITE
};
int main(){
printf("%d\n", RED);
printf("%d\n",GREEN );
printf("%d\n", BLUE);
printf("%d\n", BLACK);
printf("%d\n", YELLOW);
printf("%d\n", PINK);
printf("%d\n", WHITE);
return 0;
}
通过代码调试所得结果可知:枚举常量若是不赋值的话,默认从第一个开始的枚举常量值为0开始 。
2.手动赋值
//练习1.
enum day {//星期
Mon=1,
Tues=2,
Wek=4,
Thes,
Fri,
Sat,
Sun
};
int main() {
enum day d = Tues;
printf("%d\n", d);
printf("%d\n",Fri);
return 0;
}
enum Color//颜色
{
RED=1,
GREEN=2,
BLUE=9,
BLACK
};
int main() {
enum Color c = GREEN;
printf("%d\n", c);//2 ,因为枚举类型中赋值了GREEN
c = 5;
printf("%d\n", c);//5
printf("%d\n", BLACK);
总结:通过两个练习,我们可以知道:
枚举类型创建的变量可以进行修改,但枚举常量不会因此被修改。
枚举常量BLACK为10,因为BLUE为9,下一个枚举常量总是上一个枚举常量的值+1。
二.枚举类型的优点
我们可以使用 #define 定义常量,为什么非要使用枚举?
枚举的优点: 1. 增加代码的可读性和可维护性
2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
3. 防止了命名污染(封装)
4. 便于调试
5. 使用方便,一次可以定义多个常量
以上就是枚举类型的知识点了,大家觉得有用的话,点个一键三连吧,谢谢!
边栏推荐
- Redis - Data Types (Basic Instructions, String, List, Set, Hash, ZSet, BitMaps, HyperLogLog, GeoSpatial) / Publish and Subscribe
- 一、Jmeter环境部署
- 【分享】一个免费语料库
- LeetCode43.字符串相乘 (大数相乘可用此方法)
- (1) Docker installs Redis in practice (one master, two slaves, three sentinels)
- 字符与字符串
- 第5章 循环和关系表达式
- flaks框架学习:在 URL 中添加变量
- 【win10+cuda7.5+cudnn6.0安装caffe⑥】报错及处理方式
- 普林斯顿概率论读本读书笔记(阅读中......)
猜你喜欢
随机推荐
imx6 yocto编译备忘
ClionIDE通过指定编译器编译
arraylist之与linkedlist
第13章 类的继承-1
【动态代理】CGLIB 动态代理的使用及原理
Markdown 常用到的一些编写技巧
QT Mat转HObject和HObject转Mat 图像视觉处理
for循环使用多线程优化
pytorch中tensor 生成的函数
(一)Docker安装Redis实战(一主二从三哨兵)
全国青少年信息学奥林匹克联赛大纲
QT circle函数(图片标注)
leetcode21.合并两个有序链表
LeetCode43.字符串相乘 (大数相乘可用此方法)
Pytorch最全安装教程(一步到位)
自制病毒——整蛊
0708作业---商品信息
第13章类继承
task04 Pytorch进阶训练技巧
第9章 内存模型和名称空间