C语言中enum(枚举)详解

这篇具有很好参考价值的文章主要介绍了C语言中enum(枚举)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

enum是 enumerate(列举,枚举)一词的缩写,是 C 语言中的一种常量,被称为 enumeration constantenum提供了一种很方便的方法来将值和名称关联起来,是#define的一种替代方法。

enum可以看作是一种特殊的数组,是常量组成的列表,而且这个常量只能是整数型。

所以如果是寥寥几个不相关、不连续的常量,直接定义几个常量就可以。但是如果是相关的或者连续的,使用enum效率更高。

但是枚举与数组、元组不同的有 3点:

  1. 枚举并不是使用下标来定位元素值,而是使用关键字;
  2. 不同的enum中的值可以相同,但是名称必须不同;
  3. enum的默认值为0, 1, 2...,而数组是按照类型默认为其空值或者0

上面这段没看明白的话,可以看看下面的例子和代码就可以理解了。

严谨来说,这里不称作“关键字(keyword)”,而是“名称(name)”。因为在第一本广泛使用的 C 语言说明书《The C Programming Language》中,原文就是“name”一词。

下面是最常见的,也是在网上最常见的一种案例,以此为例开始详细介绍:

enum months {Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};

网上给出的使用方法如下(有点复杂,但是现实中,在这种情况下并不推荐这种方法,后面说简洁的):

int main()
{
    enum months mon;	/* 声明month是months中的一个值,需要注意这里的mon是变量 */
    int mon = Jan;			/* mon的值等于Jan表示的值 */
    printf("%d\n",mon);	/* 输出mon的值 */
    return 0;
}

这里输出的结果是0。是因为没有定义名称表示的值,所以就按照默认值0, 1, 2...,而Jan是第一个,也就是0

那么如果我们想这个枚举中的名称对应的值是其月份呢?
你肯定会想,枚举嘛,那就一个个等于就好了。这样确实可以,但是这里的月份是连续的整数,所以不用一个个等于,只把第一个Jan=1即可,如下:

enum months {Jan=1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};

这样不光输出Jan得到的是1,而且输出Sep得到的9,不用一个个等于那么麻烦。

看到这里你可能会想,必须要弄一个mon来获取值嘛?因为通过变量来获取常量的值,在很多情况下就挺多此一举的。

这里不光mon不是必须的,连months都不是必须的,因为enum其实是常量的集合,区分内容是通过常量的名称,而不是enum的名字。下面举个例子:

#include<stdio.h>

enum {Jan=1, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec};
enum {Mon=1, Tue, Wed, Thur, Fri, Sat, Sun};

int main()
{
    printf("%d, %d\n", Mon, Jan);
	return 0;
}

输出结果为:

1, 1

那么什么时候使用第一种方法,什么时候使用第二种呢?

文章最开头说过,enum是一种常量。一般人并不会让一个变量简简单单等于一个常量,然后再输出这个变量,就为输出常量的值,而是直接输出常量就行。

所以绝大部分情况直接使用第二种即可,因为名称是不会重复的。第一种方法是为了一些特殊情况。比如说,如果你想函数返回值有 4 种情况(实际情况可能更多),每个情况表示的顺序的整数值为0, 1, 2, 3,如下:

enum state {Standard, Error, Position_1, Position_2}

这时候代码可以写成(这里简化了很多,只是为了表示这种情况):

int test() {
    enum state ret
    if (...) {
        ret = Standard
    } else if (...) {
        ret = Error
    } else if (...) {
        ret = Position_1
    } else if (...) {
        ret = Position_2
    }
    return ret
}

这样在某些情况下更方便。

希望能帮到有需要的人~文章来源地址https://www.toymoban.com/news/detail-643493.html

到了这里,关于C语言中enum(枚举)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C# 枚举使用整理_C# enum详解

    一、枚举的定义 枚举类型 是由基础 整型数值类型 的一组命名常量定义的 值类型 。 System.Enum 类型是所有枚举类型的抽象基类。 它提供多种方法来获取有关枚举类型及其值的信息。 有关更多信息和示例,请参阅 System.Enum API 参考页。 可在基类约束中使用 System.Enum(称为枚举

    2024年02月16日
    浏览(34)
  • Java中枚举类enum的values()方法的详解

    简介: 枚举中的一个特殊方法,values(), 在Enum 的 API 文档中也找不到这个方法,当点击values()时,也会跳到本类上。 此方法可以理解为:将枚举类转变为一个枚举类型的数组,因为枚举中没有下标,我们没有办法通过下标来快速找到需要的枚举类,这时候,转变为数组之后,

    2024年02月14日
    浏览(29)
  • enum枚举类型使用

    static Direction[] values():返回本类所有枚举常量; static Direction valueOf(String name):通过枚举常量的名字返回Direction常量,注意,这个方法与Enum类中的valueOf()方法的参数个数不同

    2024年02月13日
    浏览(41)
  • TypeScript【enum 枚举】

    导语 在 TypeScript 中,新增了很多具有特性的一些数据类型处理方法, enum 【枚举】 就是其中,很具有代表性的一种,所以本章节就来聊聊 在 TypeScript 中如何去运用 enum 【枚举】 。 枚举的 概念 : 枚举(Enum)类型 用于取值被限定在一定范围内的场景 ,比如一周只能有七天

    2024年02月14日
    浏览(39)
  • C++枚举解读(enum)

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 对于开发C++来说,枚举是一个几乎必然用到的功能。当然今天要讲的枚举肯定不是平常漫不经心的使用,而是从里到外地深扒它,逐渐揭开它神秘地面纱,发现一些未曾注意到地东西。 枚举(enumeration)类

    2024年02月13日
    浏览(44)
  • TS—枚举Enum用法

    枚举用于定义数据集合,使用枚举可以定义一些带名字的常量,有普通枚举、字符串枚举和常量枚举等类型。 普通枚举:初始值默认为 0,其余的属性按顺序依次递增。 也可手动设置初始值(其余的属性依旧按顺序递增): 字符串枚举: 常量枚举:使用 const 修饰的枚举

    2024年02月16日
    浏览(39)
  • ffmpeg enum AVChannel枚举解析

    AVChannel枚举是在2022-12-20的提交中添加的,对应的版本号是5.1. 这个提交的描述是\\\"avutil/channel_layout: add AVChannel enum and related functions\\\"。 AVChannel 是一个枚举类型,用于表示音频数据的各个声道。在音频数据中,一个“声道”是一个独立的音频信号,它可以被独立处理和播放。例如

    2024年02月11日
    浏览(31)
  • 【golang】每日chatGPT:golang中实现ENUM枚举类型 | go enum

    在golang极简的哲学思想中,没有内置枚举类型 这里我们通过map+iota去实现一个枚举类型 枚举值如下: key value 1 发电类 2 储能类 13 负荷类 打印如下: 发电类 储能类 负荷类 ========= 储能类

    2024年02月15日
    浏览(46)
  • 【C程序设计】C enum(枚举)

    枚举是 C 语言中的一种基本数据类型,用于定义一组具有离散值的常量,它可以让数据更简洁,更易读。 枚举类型通常用于为程序中的一组相关的常量取名字,以便于程序的可读性和维护性。 定义一个枚举类型,需要使用 enum ,后面跟着枚举类型的名称,以及用大括

    2024年01月23日
    浏览(35)
  • 虚幻C++中的细节之枚举类型(enum)

    虚幻引擎中的代码部分实现了一套反射机制,为c++代码带了更多方便的特性。本篇文章将会着眼于其中更加细节的部分——虚幻中的enum。 在虚幻风格的代码中,我们经常能使用这样的方法来创建枚举类型: 似乎有一些c++的影子,但又好像有一些不一样的部分。它有基本c++的

    2024年02月02日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包