当前位置: 首页 > news >正文

C语言enum枚举

目录

  • 开头
  • 1.什么是枚举?
  • 2.枚举的优缺点
    • 优点
    • 缺点
  • 3.枚举的实际用途(这里只列举其一)
    • 简易计算器枚举版
    • ……
  • 结尾

开头

大家好,我叫这是我58。今天,我们要学关于C语言枚举的一些知识。

1.什么是枚举?

枚举,就是一一列举的意思,比如12个月就可以一一列举,三原色也可以一一列举,而东南西北这四个方向还可以一一列举,那么,枚举该怎样写呢?其实,枚举是这样写的:

enum RGB {RED,GREEN,BLUE
};

其中,enum是枚举的关键字,RGB是枚举的名称,而REDGREENBLUE则是枚举RGB的成员变量(这些成员变量的大小都等于int类型的大小),那么,这个RGB枚举里的REDGREENBLUE分别为什么值呢?如果想的话,那就一起看看这下面的三行代码吧。

printf("%d\n", RED);
printf("%d\n", GREEN);
printf("%d\n", BLUE);

经过这三行代码的打印之后,我们就会看到这打印出来的三个数字了,并且,从这张图片中,我们可以得知枚举RGB中的RED0GREEN1BLUE2了,因此,从这之中,我们知道了关于枚举的一个知识:枚举中的成员变量都是从上往下逐渐加1的。而在这之中,我们可以改变枚举里的成员变量的值吗?我的回答是可以,因为这就是改变枚举里的成员变量RED的值的方法:

enum RGB {RED = 7,GREEN,BLUE
};

现在,我们再用刚才用来打印枚举RGB里的所有成员变量的三段程序来运行一下,结果是这样子的:,从这三个被打印出来的数字中可以得知现在枚举RGB里的REDGREENBLUE分别为789了,因此,我们就知道枚举改变变量的方法就是跟赋值的方法一模一样了。那么,枚举变量到底是怎么在主函数存储的呢?其实,最好的答案就是这样:

enum RGB r = RED;

在这之中,enum为枚举的关键字,RGB为枚举的名称,r为枚举RGB的变量,RED则是枚举RGB的成员变量。之后,我们把枚举RGB的成员变量RED不赋值之后,我们就执行了:printf("%d\n", r);这样的函数了,执行之后,我们就发现这个函数输出一个7了,由此可以得知,enum RGB r = RED;是目前最没有问题的枚举变量在主函数存储的方式了,而后面,我们又测试了int r = RED;这段代码是否可行,却发现int r = RED;这段代码在C语言里是没有看出什么问题,而int r = RED;这段代码在C++中就爆出问题来了,由此也可以说明C++比C语言的类型检查的更严格。在看到这里之后,关于枚举的基本介绍就基本的讲完了。

2.枚举的优缺点

优点

  • 防止命名污染
  • 增加代码的可维护性和可读性,更能让人理解代码的意思
  • #define定义的标识符比较酶具有类型检查,更加严谨
  • 便于调试
  • 使用方便,一次可以定义多个常量

缺点

  • 暂无

3.枚举的实际用途(这里只列举其一)

简易计算器枚举版

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <math.h>
enum Option {ADD = 1,SUM,TIM,DIV,MOD,POW,LMOVE,RMOVE
};
int Add(int i, int ia) {return i + ia;
}
int Sum(int i, int ia) {return i - ia;
}
int Tim(int i, int ia) {return i * ia;
}
int Div(int i, int ia) {return i / ia;
}
int Mod(int i, int ia) {return i % ia;
}
int Pow(int i, int ia) {return (int)pow(i, ia);
}
int Rmv(int i, int ia) {return i >> ia;
}
int Lmv(int i, int ia) {return i << ia;
}
void calc(int(*funp)(int, int)) {int i = 0;int ia = 0;printf("请输入你要计算的两个整型 -> ");scanf("%d %d", &i, &ia);printf("计算的结果为:%d", funp(i, ia));
}
int main() {int i = 0;printf("**********************************\n");printf("* 1.Add(+)   2.Sum(-)   3.Tim(*) *\n");printf("* 4.Div(/)   5.Mod(%c)   6.Pow(^) *\n", '%');printf("* 7.Rmv(>>)  8.Lmv(<<)           *\n");printf("**********************************\n");scanf("%d", &i);switch (i) {case ADD:calc(Add);break;case SUM:calc(Sum);break;case TIM:calc(Tim);break;case DIV:calc(Div);break;case MOD:calc(Mod);break;case POW:calc(Pow);break;case LMOVE:calc(Lmv);break;case RMOVE:calc(Rmv);break;default:break;}return 0;
}

……

结尾

在你看到这里之后,可以评论来互动一下我哦。


http://www.mrgr.cn/news/53.html

相关文章:

  • MySQL 常用 SQL 语句大全
  • UE5学习笔记15-BginPlay事件、Tick事件
  • 前端(Vue)动态换肤的通用解决方案及原理分析(2)
  • 《基于CT的人工智能预后模型在非小细胞肺癌切除术中的临床应用》| 文献速递-基于深度学习的乳房、前列腺疾病诊断系统
  • 智能外呼机器人助力电销
  • C++ | Leetcode C++题解之第342题4的幂
  • 基于SpringBoot框架的能源管理系统源代码(100%开源无加密)
  • Android -- 谷歌地图绘制
  • Haproxy、mysql读写分离、python读写分离
  • 无法判断编程器固件类型
  • Django基础之MTV模型
  • Xilinx XAPP585相关
  • Delphi中的魔法注入:依赖注入的神秘面纱
  • 测试金山文档 | WPS云文档
  • android13顶部状态栏里面调节背光 背景闪烁问题
  • 计算机网络面试题汇总
  • OpenCV带α通道图像读取
  • 15:00面试,15:08就出来了,问的问题有点变态。。。
  • MATLAB基于深度学习的车辆检测系统
  • Visual Studio Code中实现移到行尾加分号或逗号并换行