C语言基础知识——枚举

news2024/9/20 5:43:30

1. 枚举

   枚举(Enumeration)是一种用户自定义的数据类型,用于定义一组具有离散值的符号常量。枚举使得代码更加可读和易于理解,提高了代码的可读性和可维护性。

//枚举的语法
enum 枚举名称 {1,2,3,
    ...
};

1.1 枚举成员的类型

   枚举的成员默认情况下都是整数类型,通常是int类型。这意味着每个枚举成员都会被赋予一个整数值,并且这些整数值从0开始递增。如果没有显式地指定枚举成员的值,那么第一个成员的值为0,第二个成员的值为1,依此类推。同时,可以显式地为枚举成员指定一个整数值,这个值可以是正整数、负整数或零。

enum Color {
    RED,    // 默认值为0
    GREEN,  // 默认值为1
    BLUE,   // 默认值为2
    BLACK = -1, // 显式赋值为-1
    WHITE = 10 // 显式赋值为10
};

举例说明(说明了成员变量是int型,从0开始自增的):
在这里插入图片描述

1.2 枚举成员的访问

  枚举成员的访问是通过枚举类型名称和成员名称来进行的。一旦定义了一个枚举类型,可以使用该类型来声明变量,并通过枚举成员名称来设置和访问其值。
  注意:不可以通过.操作符来访问枚举成员的值,因为枚举成员不是结构体或类的成员。枚举成员的访问是通过枚举类型名称和成员名称来进行的,而不是像结构体或类成员那样使用.。

//声明一个枚举变量(myColor),然后将其赋值为枚举成员(BLUE)。要访问枚举成员的值,只需使用枚举变量即可
enum Color {
    RED,
    GREEN,
    BLUE
};
enum Color myColor = BLUE;
#include <stdio.h>

enum Color {
    RED,
    GREEN,
    BLUE
};
int main() {
    enum Color myColor; // 声明一个枚举变量
    myColor = BLUE;    // 设置枚举变量的值为BLUE
    if (myColor == RED) {
        printf("颜色是红色\n");
    } else if (myColor == GREEN) {
        printf("颜色是绿色\n");
    } else if (myColor == BLUE) {
        printf("颜色是蓝色\n");
    }
    return 0;
}

  在这里插入图片描述

1.3 枚举的具体应用

1.3.1 表示状态和标志位

  枚举可以用来表示状态和标志位。例如,使用枚举来表示开关的状态,如打开(ON)和关闭(OFF);或者表示系统的状态,如就绪(READY)、等待(WAITING)等;表示选项和模式,可以定义不同的操作模式,如读取模式、写入模式和编辑模式。

enum SwitchState {
    OFF,
    ON
};
enum SystemState {
    READY,
    WAITING,
    ERROR
};
enum OperationMode {
    READ_MODE,
    WRITE_MODE,
    EDIT_MODE
};

1.3.2 表示星期和月份

  枚举常用于表示星期和月份,以提高日期和时间处理的可读性。

enum Weekday {
    Sunday,
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday
};
enum Month {
    January,
    February,
    March,
    April,
    May,
    June,
    July,
    August,
    September,
    October,
    November,
    December
};

1.3.3 状态机和控制流

  枚举常用于状态机的实现,以便在程序中管理不同的状态。这对于处理复杂的控制流非常有用。

enum State {
    IDLE,
    RUNNING,
    ERROR
};
enum State current_state = IDLE;
// 在状态机中根据当前状态执行不同的操作
switch (current_state) {
    case IDLE:
        // 执行空闲状态下的操作
        break;
    case RUNNING:
        // 执行运行状态下的操作
        break;
    case ERROR:
        // 执行错误状态下的操作
        break;
}

  枚举可以在许多不同的情境中用来提高代码的可读性和可维护性。它们允许程序员使用有意义的符号常量来表示特定的值,而不是直接使用数字或硬编码的值,从而使代码更易于理解和维护。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/977836.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++中虚继承时的构造函数

在虚继承中,虚基类是由最终的派生类初始化的,换句话说,最终派生类的构造函数必须要调用虚基类的构造函数。对最终的派生类来说,虚基类是间接基类,而不是直接基类。这跟普通继承不同,在普通继承中,派生类构造函数中只能调用直接基类的构造函数,不能调用间接基类的。 下面…

react使用hook封装一个search+input+checkbox组件

目录 react使用hook封装一个searchinputcheckbox组件searchPro.jsx使用组件效果 react使用hook封装一个searchinputcheckbox组件 searchPro.jsx import { Checkbox, Input } from "antd"; import React, { useEffect, useState } from "react"; import S…

激活函数总结(二十七):激活函数补充(Multiquadratic、InvMultiquadratic)

激活函数总结&#xff08;二十七&#xff09;&#xff1a;激活函数补充 1 引言2 激活函数2.1 Multiquadratic激活函数2.2 InvMultiquadratic激活函数 3. 总结 1 引言 在前面的文章中已经介绍了介绍了一系列激活函数 (Sigmoid、Tanh、ReLU、Leaky ReLU、PReLU、Swish、ELU、SEL…

kubernetesl yaml deploy rancher server

文章目录 1. 简介2. 预备条件3. 创建存储目录4. 部署 rancher server5. 访问6. 加入集群 1. 简介 Rancher 是一个开源的企业级全栈化容器部署及管理平台。已有超过 1900 万次下载&#xff0c;4000 生产环境的应用。 简单的说&#xff0c;就是一个可以让你通过 web 界面管理 d…

78 # koa 中间件的实现

上上节实现了上下文的&#xff0c;上一节使用了一下中间件&#xff0c;这一节来实现 koa 的中间件这个洋葱模型。 思路&#xff1a; 储存用户所有的 callback将用户传递的 callback 全部组合起来&#xff08;redux 里的 compose&#xff09;组合成一个线性结构依次执行&#…

input输出的都是字符串,类似拼接的那种

input输出的都是字符串&#xff0c;类似拼接的那种 input()方法返回的所有的结果都是str字符串类型。

一个简单的文件系统(MinixFS)实现解析

1. Minix文件系统概要 Minix file system 是 Andrew S. Tanenbaum 在 1980 年代发明的文件系统, 并随着 Minix 操作系统一起于 1987 年发布。 Linus 编写 Linux 内核第一个版本的时候, 使用的也是 Minix FS, Linux 至今依然提供了对 Minix FS 的支持。Minix FS 结构简单, 易于…

【MyBatis篇】MyBatis框架基础知识笔记

目录 ORM思想&#xff08;对象关系映射思想&#xff09; ORM思想图解 初识MyBatis 什么是MyBatis呢&#xff1f; JDBC弊端 自己总结&#xff1a; chatGPT总结&#xff1a; MyBatis介绍以及本质分析 JDBC编程的劣势&#xff0c;MyBatis提供了以下解决方案&#xff0c;具…

星辰天合 CEO 胥昕受邀参加人民网 2023 “小巨人”发展论坛

为进一步推动专精特新“小巨人”企业高质量发展&#xff0c;近日&#xff0c;由人民网主办&#xff0c;人民网财经研究院、828 企业服务平台共同承办的 2023“小巨人”发展论坛在人民日报社新媒体大厦举行&#xff0c;星辰天合 CEO 胥昕受邀参加。 2023 “小巨人”发展论坛现场…

基于Pytorch构建Faster-RCNN网络进行目标检测的一段插曲-安装GPU环境

因工作原因&#xff0c;原来的台式机工作站发生了变更&#xff0c;除了GPU显卡&#xff08;NVIDIA GeForce GTX 1660显卡变成了NVIDIA Quadro P2200显卡&#xff09;以外&#xff0c;其他配置都差不多&#xff0c;从网上查阅NVIDIA Quadro P2200相当于NVIDIA GeForce GTX 1660显…

commet与websocket

commet与websocket Comet 前言 Comet是一种用于web的技术&#xff0c;能使服务器能实时地将更新的信息传送到客户端&#xff0c;而无须客户端发出请求&#xff0c;目前有两种实现方式&#xff0c;长轮询和iframe流。 实现方式 长轮询 长轮询是在打开一条连接以后保持&…

visual studio 2008 编译项目出现层次不穷问题枚举

文章目录 1、严重性 代码 说明 项目 文件 行 禁止显示状态 错误 C1047 对象或库文件“.lib”是使用与其他对象(如“x64\Release\main.obj”)不同的1、错误原因 2、意外的预编译头错误,只需重新运行编译器就可能修复此问题3、 warning LNK4099: 未找到 PDB“vc90.pdb”(使用“..…

【数据结构与算法系列3】有序数组的平方

给你一个按 非递减顺序 排序的整数数组 nums&#xff0c;返回 每个数字的平方 组成的新数组&#xff0c;要求也按 非递减顺序 排序。 示例 1&#xff1a; 输入&#xff1a;nums [-4,-1,0,3,10] 输出&#xff1a;[0,1,9,16,100] 解释&#xff1a;平方后&#xff0c;数组变为 …

JavaScript学习笔记01

JavaScript笔记01 什么是 JavaScript JavaScript 是一门世界上最流行的脚本语言&#xff0c;它是一种弱类型的脚本语言&#xff0c;其代码不需要经过编译&#xff0c;而是由浏览器解释运行&#xff0c;用于控制网页的行为。 发展历史 参考&#xff1a;JavaScript的起源故事…

AbstractQueuedSynchronizer--AQS

概述&#xff1a;全称是 AbstractQueuedSynchronizer&#xff0c;是阻塞式锁和相关的同步器工具的框架特点&#xff1a; 用 state 属性来表示资源的状态&#xff08;分独占模式和共享模式&#xff09;&#xff0c;子类需要定义如何维护这个状态&#xff0c;控制如何获取锁和释放…

第9篇:ESP32超声波HC-SR04Arduino类库编写

第1篇:Arduino与ESP32开发板的安装方法 第2篇:ESP32 helloworld第一个程序示范点亮板载LED 第3篇:vscode搭建esp32 arduino开发环境 第4篇:vscodeplatformio搭建esp32 arduino开发环境 第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验 第6篇:ESP32连接无源喇叭播放音乐《涛声…

从一到无穷大 #13 How does Lindorm TSDB solve the high cardinality problem?

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言优势挑战系统架构细节/优化存储引擎索引写入查询 经验Ablation Study总结 引言 …

我的创作纪念日:一个特别的纪念日

一个特别的纪念日 机缘收获日常成就憧憬 &#x1f4a1;一个热爱分享高性能服务器后台开发知识的博主&#xff0c;目标是通过理论与代码实践的结合&#xff0c;让世界上看似难以掌握的技术变得易于理解与掌握。技能涵盖了多个领域&#xff0c;包括C/C、Linux、中间件、数据库、云…

【C++学习笔记】7、常量

文章目录 【 1、常量的分类 】1.1 整型常量1.2 浮点常量1.3 字符常量1.4 字符串常量1.5 布尔常量 【 2、常量的定义 】2.1 #define 预处理器2.2 const 关键字 常量 是固定值&#xff0c;在程序执行期间不会改变。这些固定的值&#xff0c;又叫做字面量。常量可以是任何的基本数…

网络安全合规-DSMM

DSMM&#xff08;Data Security Management Model&#xff09;是一种数据安全管理模型。该模型以数据为中心&#xff0c;从数据的生命周期入手&#xff0c;从数据发布、使用、共享、存储、删除等几个方面来管理数据安全。 DSMM提供了一些有效的数据安全管理原则和策略&#xf…