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

探索 C 语言枚举类型的奇妙世界

目录

  • 一、枚举类型的定义
  • 二、枚举类型变量的声明和初始化
    • 2.1 先定义枚举类型,再声明变量
    • 2.2 定义枚举类型的同时声明变量
  • 三、自定义枚举常量的值
  • 四、枚举类型的特点
  • 五、注意事项

在C语言中,枚举类型( enum)是一种用户自定义的数据类型,它允许程序员将一组相关的常量符号化,提高代码的可读性和可维护性。下面将从枚举类型的定义、使用、特点以及注意事项等方面进行详细讲解。

一、枚举类型的定义

枚举类型使用enum关键字来定义,其基本语法格式如下:

enum 枚举类型名 {枚举常量1,枚举常量2,// 可以有更多的枚举常量枚举常量n
};
  • 枚举类型名:是自定义的枚举类型的标识符,用于后续声明该枚举类型的变量。
  • 枚举常量:是枚举类型中预定义的值,它们是整型常量,默认情况下,第一个枚举常量的值为0,后续的枚举常量的值依次递增1。

以下是一个简单的枚举类型定义示例:

enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
};

在这个例子中,定义了一个名为Weekday的枚举类型,包含了一周七天的枚举常量。Monday的值默认为0,Tuesday的值为1,依此类推,Sunday的值为6。

二、枚举类型变量的声明和初始化

定义了枚举类型后,可以声明该枚举类型的变量,并对其进行初始化。声明和初始化的方式有以下几种:

2.1 先定义枚举类型,再声明变量

#include <stdio.h>// 定义枚举类型
enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
};int main() {// 声明枚举类型变量enum Weekday today;// 初始化变量today = Wednesday;printf("Today is %d\n", today);return 0;
}

2.2 定义枚举类型的同时声明变量

#include <stdio.h>// 定义枚举类型并声明变量
enum Weekday {Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
} today;int main() {// 初始化变量today = Friday;printf("Today is %d\n", today);return 0;
}

三、自定义枚举常量的值

在定义枚举类型时,可以为枚举常量指定特定的值,而不使用默认值。语法如下:

enum 枚举类型名 {枚举常量1 =1,枚举常量2 =2,// 可以有更多的枚举常量枚举常量n = 值n
};

以下是一个自定义枚举常量值的示例:

#include <stdio.h>enum Month {January = 1,February,March,April,May,June,July,August,September,October,November,December
};int main() {enum Month currentMonth = March;printf("Current month is %d\n", currentMonth);return 0;
}

在这个例子中,January的值被指定为1,后续的枚举常量February的值为2,March的值为3,依此类推。

四、枚举类型的特点

  • 提高代码可读性:使用枚举类型可以将一组相关的常量用有意义的名称表示,使代码更易于理解和维护。例如,使用MondayTuesday等名称比直接使用整数0、1更直观。
  • 类型安全:枚举类型是一种特定的数据类型,编译器可以进行类型检查,避免使用不合法的值。例如,不能将一个普通的整数直接赋值给枚举类型的变量,需要进行强制类型转换。
  • 默认值递增:如果没有为枚举常量指定值,第一个枚举常量的值默认为0,后续的枚举常量的值依次递增1。

五、注意事项

  • 枚举常量是常量:枚举常量的值在定义后不能被修改,它们是只读的。例如,以下代码是错误的:
enum Weekday {Monday,Tuesday
};
Monday = 10; // 错误:不能修改枚举常量的值
  • 枚举类型的本质是整数:枚举类型的变量实际上是一个整数,因此可以进行整数运算。但需要注意的是,这种运算可能会导致枚举类型的语义丢失。例如:
#include <stdio.h>enum Weekday {Monday,Tuesday,Wednesday
};int main() {enum Weekday day = Monday;day = day + 2; // 这里进行了整数运算printf("Day is %d\n", day);return 0;
}
  • 枚举常量的作用域:枚举常量的作用域与枚举类型的定义位置有关。如果枚举类型定义在函数内部,枚举常量的作用域仅限于该函数;如果定义在函数外部,枚举常量的作用域是整个文件。

综上所述,枚举类型是C语言中一种非常有用的特性,它可以使代码更加清晰、易读和安全。

相关文章:

探索 C 语言枚举类型的奇妙世界

目录 一、枚举类型的定义二、枚举类型变量的声明和初始化2.1 先定义枚举类型&#xff0c;再声明变量2.2 定义枚举类型的同时声明变量 三、自定义枚举常量的值四、枚举类型的特点五、注意事项 在C语言中&#xff0c;枚举类型&#xff08; enum&#xff09;是一种用户自定义的数…...

buu-ciscn_2019_ne_5-好久不见50

1. 背景分析 目标程序是一个存在漏洞的二进制文件&#xff0c;我们可以通过以下方式利用漏洞获取 shell&#xff1a; 程序中存在 system() 函数&#xff0c;但没有明显的 /bin/sh 字符串。 使用工具&#xff08;如 ROPgadget&#xff09;发现程序中有 sh 字符串&#xff0c;可…...

HCIA-ACL实验

前提条件&#xff1a;实现底层互通 转发层面 1、基本ACL ①要求PC3不能访问网段192.168.2.0的网段&#xff0c;PC4和客户端能正常访问服务器 ②AR2配置 acl 2000 rule deny source 192.168.1.1 0 匹配流量 int g 0/0/0 traffic-filter inbound acl 2000 接口调用…...

Java入职篇(2)——开发流程以及专业术语

Java入职篇&#xff08;2&#xff09;——开发流程以及专业术语 开发流程 开发术语 测试用例&#xff08;用例&#xff09; 测试人员写的测试方案&#xff0c;基本上就是编写的测试过程&#xff0c;以及测试的预取结果 灰度测试 现在小部分范围内使用&#xff0c;然后逐步…...

三相逆变器不控整流场景简要分析

0 三相逆变器拓扑 LCL三相逆变器简要拓扑如下图所示&#xff0c;其他类型如多电平逆变器类似。 1 原理说明 软件在进行直流母线电压Udc的给定取值时&#xff0c;考虑到电压利用率&#xff0c;通常会比电网线电压的峰值稍微高些&#xff0c;比如取线电压峰值的1.0x倍&#x…...

语言识别模型whisper学习笔记

语言识别模型whisper学习笔记 Whisper 是由 OpenAI 于 2022年9月 推出的开源自动语音识别&#xff08;ASR&#xff09;系统&#xff0c;旨在实现高精度、多语言的语音转文本及翻译任务。其核心目标是解决传统语音识别模型在噪声环境、口音多样性及多语言场景下的局限性。 一、…...

centos 换阿里云yum

1、备份原有的Yum源配置文件 在更换Yum源之前&#xff0c;先备份CentOS系统中默认的Yum源配置文件&#xff0c;以便在需要时恢复。默认的Yum源配置文件位于 /etc/yum.repos.d/ 目录下&#xff0c;通常包含 CentOS-Base.repo、CentOS-Debuginfo.repo、CentOS-Vault.repo 等文件…...

Jmeter的简单使用

前置工作 确保java8 版本以上jmeter下载路径&#xff08;选择Binaries&#xff09;&#xff1a;https://jmeter.apache.org/download_jmeter.cgi直接解压&#xff0c;找到bin下面的文件&#xff1a;jmeter.bat&#xff08;可选&#xff09;汉化&#xff0c;修改 jmeter.proper…...

CSS元素层叠顺序规则

CSS元素层叠顺序规则 看图说话总结: background/borderz-index(<0)blockfloatinline/inline-blockz-index(0,auto)z-index (>0)...

用Maven创建只有POM文件的项目

使用 mvn 创建一个仅包含 pom.xml 文件的父项目&#xff0c;可以借助 maven-archetype-quickstart 原型&#xff0c;然后移除不必要的文件&#xff0c;或者直接通过命令生成最简的 pom.xml 文件。以下是具体操作步骤&#xff1a; 一、方法一&#xff1a;使用原型创建后清理 1…...

使用Python在Word中生成多种不同类型的图表

目录 工具与环境配置 在 Word 中创建图表的步骤 在Word中创建柱形图 在Word中创建条形图 在Word中创建折线图 在Word中创建饼图 在Word中创建散点图 在Word中创建气泡图 在 Word 文档中插入图表不仅能更直观地呈现数据&#xff0c;还能提升文档的可读性和专业性。常见的…...

Webpack构建流程详解优化前端性能\Dev-Server与Proxy\网络攻击\HMR

简版 核心流程图 根据&#xff0c;Webpack的构建流程分为初始化、编译和输出三个阶段。初始化阶段读取配置、加载插件、实例化Compiler。编译阶段&#xff08;构建依赖关系&#xff09;涉及Compiler类的运行&#xff0c;生成Compilation对象&#xff0c;处理模块依赖。输出阶…...

Python 实现的采集诸葛灵签

Python 实现的采集诸葛灵签 项目介绍 这是一个基于 Python 开发的诸葛灵签数据采集和展示项目。通过爬虫技术获取诸葛神签的签文和解签内容&#xff0c;并提供数据存储和查询功能。 项目结构 zhuge/├── zhuge_scraper.py # 爬虫主程序├── zhuge_pages/ # 数据存储目录…...

ESP-IDF ubuntu版本 V5.2

1.MobaXterm 这个软件方面粘贴,文件拷贝 MobaXterm 2.安装之前请确保你安装了Python 和 pip V5.2需要python3.8和pip mkdir esp32 cd esp32 git clone https://gitee.com/EspressifSystems/esp-gitee-tools.git cd esp-gitee-tools ./jihu-mirror.sh set cd .. git clone …...

Opencv之掩码实现图片抠图

掩码实现图片抠图 目录 掩码实现图片抠图1 掩码1.1 概念1.2 创建掩码1.3抠图思路 2 代码测试 1 掩码 1.1 概念 掩码&#xff08;Mask&#xff09;是一种用于指定图像处理操作区域的工具。掩码通常是一个与图像尺寸相同的二值图像&#xff0c;其中像素值为0表示不处理&#xff…...

警惕!Ollama大模型工具的安全风险及应对策略

文章目录 **Ollama的安全隐患&#xff1a;不容忽视的风险****未授权访问&#xff1a;门户洞开的风险****数据泄露&#xff1a;敏感信息的外泄****漏洞利用&#xff1a;历史遗留的隐患** **安全加固&#xff1a;守护数据与服务的防线****限制监听范围&#xff1a;内网隔离的保护…...

MySQL -- 表的约束

概念引入&#xff1a;真正的约束表字段的是数据类型&#xff0c;但是数据类型的约束方式比较单一的&#xff0c;所以需要一些额外的一些约束&#xff0c;用于表示数据的合法性&#xff0c;在只有数据类型一种约束的情况下&#xff0c;我们比较难保证数据是百分百合法。通过添加…...

详解数据库范式

范式 1. 第一范式&#xff08;1NF&#xff09;2. 第二范式&#xff08;2NF&#xff09;3. 第三范式&#xff08;3NF&#xff09;4. BC范式&#xff08;BCNF&#xff0c;Boyce-Codd Normal Form&#xff09;5. 第四范式&#xff08;4NF&#xff09;6. 第五范式&#xff08;5NF&a…...

Nginx + Keepalived 高可用集群

一、NginxKeepalived 原理 1.1.Nginx 负载均衡机制 Nginx 是一款轻量级且高性能的 Web 服务器和反向代理服务器&#xff0c;在负载均衡方面有着卓越的表现。其具备强大的七层流量管理能力&#xff0c;能够基于 URL、Cookie、HTTP 头信息等对请求进行精准路由。例如&#xff0…...

循环遍历 Java 集合中元素的方法总结

循环遍历 Java 集合中元素的方法 在 Java 中&#xff0c;有多种方法可以遍历集合中的元素。以下是几种常见的遍历方法及其优缺点&#xff1a; 1. for-each 循环 语法&#xff1a; for (ElementType element : collection) {// 处理 element }适用场景&#xff1a;所有集合类型…...

树莓派上的 TensorFlow Lite:从零开始的摄像头图像识别

**** 1. 引言 随着人工智能&#xff08;AI&#xff09;和机器学习&#xff08;ML&#xff09;的发展&#xff0c;越来越多的开发者希望在嵌入式设备&#xff08;如树莓派&#xff09;上运行 AI 模型&#xff0c;实现目标检测、人脸识别等功能。TensorFlow Lite&#xff08;TF…...

金融时间序列分析(Yahoo Finance API实战)

这里写目录标题 金融时间序列分析(Yahoo Finance API实战)1. 引言2. 项目背景与意义3. 数据集介绍4. GPU加速在数据处理中的应用5. 交互式GUI设计与加速处理6. 系统整体架构7. 数学公式与指标计算8. 完整代码实现9. 代码自查与BUG排查10. 总结与展望金融时间序列分析(Yahoo …...

Python 正则表达式模块 re

Python 正则表达式模块 re flyfish 一、正则表达式基础 1. 什么是正则表达式&#xff1f; 正则表达式&#xff08;Regular Expression, RE&#xff09;是一种用于匹配、查找和替换文本模式的工具&#xff0c;由普通字符&#xff08;如字母、数字&#xff09;和特殊字符&…...

Vue生命周期

一、Vue的生命周期及其阶段 Vue生命周期&#xff1a;一个Vue实例从 创建 到 销毁 的整个过程。也就是从开始创建、初始化数据、编译模板、挂载Dom→渲染、更新→渲染、卸载等一系列过程&#xff0c;我们称这是 Vue 的生命周期。 生命周期的四个阶段&#xff1a;① 创建 ② 挂…...

vue3数据双向绑定解析

Vue 3 的双向绑定原理主要基于 Proxy 和 Reflect&#xff0c;核心源码在 reactivity 模块中。 1. 核心模块&#xff1a;reactivity reactivity 模块负责响应式数据的实现&#xff0c;主要包括以下几个文件&#xff1a; reactive.ts&#xff1a;处理对象和数组的响应式。ref.t…...

Gemini 2.0 全面解析:技术突破、应用场景与竞争格局

摘要 2025年3月&#xff0c;谷歌正式发布Gemini 2.0大模型&#xff0c;凭借其在多模态处理、代码生成和长上下文理解等领域的突破性进展&#xff0c;迅速成为AI领域的焦点。本文将深入剖析Gemini 2.0的技术架构、应用场景及与Grok3、DeepSeek R1、ChatGPT-4.5等竞品的对比&…...

【Linux系统编程】管道

目录 1、什么是管道2、管道的种类3、数据的读写3.1、管道通信3.2、管道的命令实例&#xff1a; 4、无名管道4.1、pipe() 无名管道的创建示例&#xff1a;简单读写示例&#xff1a;加入进程示例&#xff1a;通过 管道&#xff08;pipe&#xff09; 实现 父子进程之间的双向通信 …...

LeeCode题库第643题

643.子数组最大平均数I 项目场景&#xff1a; 给你一个由 n 个元素组成的整数数组 nums 和一个整数 k 。 请你找出平均数最大且 长度为 k 的连续子数组&#xff0c;并输出该最大平均数。 任何误差小于 10-5 的答案都将被视为正确答案。 示例 1&#xff1a; 输入&#xff…...

数据炼丹与硬件互动:预测湿度的武学之道

前言 在这茫茫数据江湖中&#xff0c;高手过招&#xff0c;唯有融合机器学习与物联网之精髓&#xff0c;方能于风云变幻间自成一派。本文正是为各位江湖同道献上的秘籍&#xff0c;既有数据炼丹&#xff08;预处理、模型训练&#xff09;之奥义&#xff0c;也有硬件互通&#…...

【SpringBoot】MD5加盐算法的详解

目录 一、什么是加盐算法 二、如何实现加盐算法 2.1 加盐算法代码实现 2.2 注册页面中进行密码加盐 2.3 登录页面进行加盐的解密 2.4 注册和登录 一、什么是加盐算法 加盐算法是一种用于增强密码安全性的技术。这种技术通过在密码存储过程中添加一个随机生成的盐值&…...

IP风险度自检,互联网的安全“指南针”

IP地址就像我们的网络“身份证”&#xff0c;而IP风险度则是衡量这个“身份证”安全性的重要指标。它关乎着我们的隐私保护、账号安全以及网络体验&#xff0c;今天就让我们一起深入了解一下IP风险度。 什么是IP风险度 IP风险度是指一个IP地址可能暴露用户真实身份或被网络平台…...

如何手动使用下载并且运行 QwQ-32B-GGUF

首先使用安装 pip install ModelScope 使用 ModelScope 下载对应的模型 modelScope download --model Qwen/QwQ-32B-GGUF qwq-32b-q4_k_m.gguf 第二步开始下载 ollama git clone https://githubfast.com/ggerganov/llama.cpp # githubfast.com 可以加速下载 切换到目录&am…...

【实战ES】实战 Elasticsearch:快速上手与深度实践-附录-3-从ES 7.x到8.x的平滑迁移策略

&#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 &#x1f449; 点击关注不迷路 附录-版本升级指南 3-Elasticsearch 7.x 到 8.x 平滑迁移策略指南1. 升级必要性分析1.1 版本特性对比1.2 兼容性评估矩阵 2. 预升级准备清单2.1 环境检查表2.2 数据备份策略 3. 分阶段…...

IP 地址

文章目录 IP 地址IP 地址的分类IPv4 地址IPv6 地址 公有 IP 与私有 IP静态 IP 与动态 IP子网与子网掩码常见 IP 地址用途IP 地址的工作方式总结 IP 地址 IP&#xff08;Internet Protocol&#xff09;地址是计算机网络中的标识符&#xff0c;用于唯一标识网络中的设备。它可以…...

利用余弦相似度在大量文章中找出抄袭的文章

我前面的2篇文章分别讲了如果利用余弦相似度来判断2篇文章的相似度&#xff0c;来确定文章是否存在抄袭&#xff0c;和余弦相似度的原理&#xff0c;即余弦相似度到底是怎么来判断文章的相似性高低的等等。这一篇再说下&#xff0c;对于文章字数多和大量文章时&#xff0c;如果…...

《C语言中“输入魔法师”:scanf函数的奥秘与技巧》

&#x1f680;个人主页&#xff1a;fasdfdaslsfadasdadf &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、引言二、scanf函数的基本语法三、格式说明符的种类及用法&#xff08;一&#xff09;整数输入&#xff08;二&#xff09;浮点数输入&#xff08;三&…...

VSTO(C#)Excel开发6:与窗体交互

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…...

PCL 点云OBB包围盒(二)

文章目录 一、简介二、实现步骤二、实现代码三、实现效果参考资料一、简介 包围盒是一种求解离散点集最优包围空间的算法,基本思想是用体积稍大且特性简单的几何体(称为包围盒)来近似地代替复杂的几何对象。(来源于百度)常用的求解包围盒的算法主要有AABB和OOB算法,但AAB…...

IDEA 一键完成:打包 + 推送 + 部署docker镜像

1、本方案要解决场景&#xff1f; 想直接通过本地 IDEA 将最新的代码部署到远程服务器上。 2、本方案适用于什么样的项目&#xff1f; 项目是一个 Spring Boot 的 Java 项目。项目用 maven 进行管理。项目的运行基于 docker 容器&#xff08;即项目将被打成 docker image&am…...

农业建设项目管理系统评测:8款推荐工具优缺点分析

本文主要介绍了以下8款农业建设项目管理系统&#xff1a;1.PingCode&#xff1b; 2. Worktile &#xff1b;3. 建米农业工程项目管理系统&#xff1b;4. 开创云数字农业管理平台&#xff1b; 5. Trimble Ag Software&#xff1b;6.Conservis&#xff1b; 7. Agworld &#xff1…...

【MySQL】表的约束(上)

文章目录 表的约束什么是表的约束空属性默认值列描述&#xff08;comment&#xff09;零填充&#xff08;zerofill&#xff09;主键 总结 表的约束 什么是表的约束 表的约束&#xff08;Constraints&#xff09;是数据库表中的规则&#xff0c;用于限制存储的数据&#xff0c…...

根据TCP中的拥塞控制细说网卡了数据怎么传输

TCP&#xff08;传输控制协议&#xff09;中的拥塞控制是确保网络在数据传输过程中不会发生过载并导致网络崩溃的机制。拥塞控制通过动态地调整发送方的数据传输速率来适应网络的负载&#xff0c;从而避免网络拥塞。TCP的拥塞控制主要是根据网络的状况自动调整其发送速率&#…...

【SpringMVC】入门版

1.基本概念 1.1三层架构 三层架构也就是我们常说的b/s架构中的表现层&#xff0c;业务层和持久层,每层都各司其职&#xff0c;下面来分别讲解这三层的作用。 表现层&#xff1a; 也就是我们常说的web层。它负责接收客户端的请求&#xff0c;向客户端响应结果&#xff0c;通…...

DAY33 贪心算法Ⅱ

122. 买卖股票的最佳时机 II - 力扣&#xff08;LeetCode&#xff09; 想到把整体利润分解为每天的利润&#xff0c;就豁然开朗了。 class Solution { public:int maxProfit(vector<int>& prices) {int result0;for(int i1;i<prices.size();i){resultmax(0,pric…...

re-二维四向迷宫题

关于迷宫 我们结合具体的来进行描述。 迷宫&#xff0c;顾名思义是有墙&#xff0c;且只有一条路可以走下去。当我们在题目中获得了map&#xff08;地图&#xff09;就拥有了上帝视角&#xff0c;就可以顺利的走出迷宫。 在下面这个图就是一个迷宫的map&#xff0c;其中A是起…...

并发编程面试题一

1、什么是进程、线程、协程&#xff0c;他们之间的关系是怎样的 进程是操作系统进行资源分配和调度的基本单位。每个进程都有独立的内存空间&#xff0c;进程之间相互独立&#xff0c;一个进程崩溃不会影响其他进程&#xff0c;进程间通信&#xff08;IPC&#xff09;需要通过…...

3.14周报

本周主要是在找双目视觉三维人体姿态估计方向的文章&#xff0c;这篇dual-diffusion&#xff0c;双目三维人体姿态估计的双扩散文章&#xff0c;引起了兴趣&#xff0c;作者从由于摄像机数量的减少&#xff0c;增加了3d重建的不确定性入手&#xff0c;然后使用了扩散模型&#…...

【redis】zset 类型:基本命令(上)

set 集合&#xff1a; 唯一无序。&#xff08;顺序不重要&#xff09;孙行者、行者孙>同一只猴 list 有序。&#xff08;顺序很重要&#xff09;孙行者、行者孙>不同的猴 zset 有序。升序/降序 有序集合 排序的规则是什么&#xff1f; 给 zset 中的 member 引入了…...

3分钟复现 Manus 超强开源项目 OpenManus

文章目录 前言什么是 OpenManus构建方式环境准备克隆代码仓库安装依赖配置 LLM API运行 OpenManus 效果演示总结个人简介 前言 近期人工智能领域迎来了一位备受瞩目的新星——Manus。Manus 能够独立执行复杂的现实任务&#xff0c;无需人工干预。由于限制原因大部分人无法体验…...

【Java篇】一法不变,万象归一:方法封装与递归的思想之道

文章目录 Java 方法的使用&#xff1a;从基础到递归的全面解析一、方法的概念及使用1.1 什么是方法 (method)?1.2 方法定义1.3 方法调用的执行过程1.4 实参和形参的关系1.5 没有返回值的方法 二、方法重载2.1 为什么需要方法重载2.2 方法重载的概念2.2.4 C 和 Java 的比较&…...