目录

前文列表

程序编译流程与 GCC 编译器

C 语言编程 — 基本语法

C 语言编程 — 基本数据类型

C 语言编程 — 变量与常量

C 语言编程 — 运算符

C 语言编程 — 逻辑控制语句

C 语言编程 — 函数

C 语言编程 — 高级数据类型 — 指针

C 语言编程 — 高级数据类型 — 数组

C 语言编程 — 高级数据类型 — 字符串

声明枚举类型

枚举类型的本质是一个整型常量的集合,列举出可被访问的值的范围,所谓 “枚举” 就是把可能出现的值一一列举出来。需要先声明一个枚举类型,告诉编译器它具有哪些元素,然后才能够被定义一个枚举类型的变量。

  • 枚举类型定义中的每个枚举元素代表一个整型数值。若自定义枚举类型的同时无赋值行为,则由编译系统会按照定义的顺序为其分配 0, 1, 2, … 的数据值;反之,则以赋予的数值为准。
  • 枚举元素必须为常量,在枚举定义之外,均不能对枚举元素进行赋值操作。
  • 各枚举元素不能重名,枚举元素名也不能为程序中其他关键字或变量名。
// enum 关键字用于定义枚举类型
enum 枚举类型名
{
枚举元素1[=整型常量1],
枚举元素2[=整型常量2],
...
枚举元素n[=整型常量n]
};

e.g.

enum DAY
{
MON=1, TUE, WED, THU, FRI, SAT, SUN
};

默认情况下,第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1,以此类推。如上例,如果我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

定义枚举类型的变量

  • 先定义枚举类型,再定义枚举变量
// 声明枚举类型
enum DAY{
MON=1, TUE, WED, THU, FRI, SAT, SUN
}; // 定义枚举类型变量
enum DAY day;
  • 定义枚举类型的同时定义枚举变量
enum DAY{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;
  • 省略枚举名称,直接定义枚举类型的同时定义枚举变量
enum{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} day;

示例:

#include <stdio.h>

/* 声明了一个枚举类型 */
enum DAY{
MON=1, TUE, WED, THU, FRI, SAT, SUN
}; int main(){
/* 定义一个枚举类型变量 */
enum DAY day; /* 枚举类型变量使用枚举值 */
day = WED; printf("Day num is %d", day);
return 0;
}

我们也可以在定义枚举类型时改变枚举元素的值:

enum season {spring, summer=3, autumn, winter};

没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5。

枚举类型变量的枚举值

C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的(因为不是数组类型)。

不过在一些特殊的情况下,枚举类型是可以实现有条件的遍历的:

#include <stdio.h>

enum DAY{
MON=1, TUE, WED, THU, FRI, SAT, SUN
}; int main(){
int i; for(i = MON; i < SUN; i++){
printf("Day is %d\n", i);
}
return 0;
}

上述例子可见,枚举类型中的枚举值实际上就是一个整型,即便没有定义枚举类型的变量,编译器也会自动的将枚举元素替换为枚举值,并且当枚举值是顺序递增的时候就可以被循环。相反,则不行:

enum{
ENUM_0,
ENUM_10 = 10,
ENUM_11
};

枚举在 switch 语句中的使用

#include <stdio.h>
#include <stdlib.h> int main(){
enum COLOR{
red=1,
green,
blue,
}; enum COLOR favorite_color; printf("Input your favorite color:");
/* %u for unsigned integer type*/
scanf("%u", &favorite_color); switch(favorite_color){
case red:
printf("red.");
break;
case green:
printf("green.");
break;
case blue:
printf("blue.");
break;
default:
printf("None.");
}
return 0;
}

将整型转换为枚举类型

#include <stdio.h>
#include <stdlib.h> int main(){ enum DAY{
MON=1, TUE, WED, THU, FRI, SAT, SUN
} weekend; int a = 7;
weekend = (enum DAY) a;
// weekend = a 错误 printf("weekend: %d", weekend);
return 0;
}

C 语言编程 — 高级数据类型 — 枚举的更多相关文章

  1. R语言编程艺术# 数据类型向量(vector)

    R语言最基本的数据类型-向量(vector) 1.插入向量元素,同一向量中的所有的元素必须是相同的模式(数据类型),如整型.数值型(浮点数).字符型(字符串).逻辑型.复数型等.查看变量的类型可以用t ...

  2. C语言编程入门之--第四章C语言基本数据类型

      导读:C语言程序中经常涉及一些数学计算,所以要熟悉其基本的数据类型.数据类型学习起来比较枯燥,不过结合之前的内存概念,以及本节的字节概念,相信数据类型也就不难理解了.本章从二进制的基本概念开始,然 ...

  3. 华为C语言编程规范

    DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd ...

  4. 第二章 C语言编程实践

    上章回顾 宏定义特点和注意细节 条件编译特点和主要用处 文件包含的路径查询规则 C语言扩展宏定义的用法 第二章 第二章 C语言编程实践 C语言编程实践 预习检查 异或的运算符是什么 宏定义最主要的特点 ...

  5. linux 操作系统下c语言编程入门

    2)Linux程序设计入门--进程介绍 3)Linux程序设计入门--文件操作 4)Linux程序设计入门--时间概念 5)Linux程序设计入门--信号处理 6)Linux程序设计入门--消息管理  ...

  6. 采访:Go语言编程

    Go语言是由Google在2009年11月份公布的,它的目标是要应对软件开发所面临的最新挑战.Go语言特别被设计为快速(包括在编译时).支持多核的语言,并且兼顾了动态语言的简单性和静态类型语言的安全性 ...

  7. Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单

    原文:Delphi 基本数据类型列表 高级数据类型列表 字符类型查询列表清单 长长的列表文字类型文件 分类 范围 字节 备注 简单类型 序数 整数 Integer -2147483648 .. 214 ...

  8. C++复习6.C/C++高级数据类型

    C/C++高级数据类型 1.C语言支持把基本数据类型组合起来形成更加强大的构造数据类型,就是C语言的struct(UDT, User Defined Type). Struct 和class : 在C ...

  9. 大数据技术之_16_Scala学习_06_面向对象编程-高级+隐式转换和隐式值

    第八章 面向对象编程-高级8.1 静态属性和静态方法8.1.1 静态属性-提出问题8.1.2 基本介绍8.1.3 伴生对象的快速入门8.1.4 伴生对象的小结8.1.5 最佳实践-使用伴生对象解决小孩 ...

  10. Uber Go 语言编程规范

    目录 Uber Go 语言编程规范 1. 介绍 2. 编程指南 3. 性能相关 4. 编程风格 5. 编程模式(Patterns) 6. 总结 Uber Go 语言编程规范 相信很多人前两天都看到 U ...

随机推荐

  1. #杜教筛,欧拉函数,整除分块#HDU 6683 Rikka with Geometric Sequen

    题目 由\(1,2,\dots,n-1,n\)组成的序列中有多少个子序列是等比数列\((n\leq 5*10^{17})\) 分析 分类讨论,先设公比为\(q=\frac{i}{j}[gcd(i,j) ...

  2. 使用OHOS SDK构建opus

    参照OHOS IDE和SDK的安装方法配置好开发环境. 从github下载源码. 执行如下命令: git clone --depth=1 https://github.com/xiph/opus 进入 ...

  3. 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新

    目录 简介 什么是区块链 区块链不是什么 区块链的基础:密码学 区块链的基础:分布式系统和共识机制 超级账本Hyperledger 以太坊 Libra 比特币 总结 简介 区块链是一种防篡改的共享数字 ...

  4. OpenHarmony Meetup常州站招募令

    OpenHarmony Meetup 常州站正火热招募中! 诚邀充满激情的开发者参与线下盛会~ 探索OpenHarmony前沿科技,畅谈未来前景, 感受OpenHarmony生态构建之路的魅力! 线下 ...

  5. Linux之驱动管理

    一.相关概念 驱动概念 驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁. 将驱动程序载入内核,应用程序可以通过系统调用接口来访问(驱动)底层的硬件设备. 驱动功能 对设备初始化和释放 把数据 ...

  6. 重走py 之路 ——普通操作与函数(三)

    前言 本节主要介绍函数,但是函数是由操作组成的.那么就分为两部,一部分为操作一部分为函数. 正文 py世界中的操作. 操作 if: 在学习任何一门语言中,关系if,要关系另外一件事,那就是if是否只能 ...

  7. c# countDownEvent类

    前言 把异步先总结完吧. countDownEvent 这东西是干什么的呢? 比如说我们比赛跑步,我们需要得出的是第一二三名得出后就可以先统计出来,因为比较重要,后面没有获得获奖名次的可以后续统计出来 ...

  8. 高云GOWIN下载出现No devices found咋办

    在使用GOWIN下载器下载会出现该类问题 No devices found错误. 原因如下: A . Windows10 系统会出现下载器通道顺序错误,所以要确保在 A 通道上. B.有一些 USB ...

  9. 力扣569(MySQL)-员工薪水中位数(困难)

    题目: 写一个SQL查询,找出每个公司的工资中位数,以任意顺序返回结果表.查询结果个数如下所示. 输出结果如下:  解题思路: 中位数:位于集合正中间的元素.当数据总书为奇数时,最中间的数就是中位数, ...

  10. SpringBoot Admin2.0 集成 Java 诊断神器 Arthas 实践

    简介: 项目最初使用 Arthas 主要有两个目的: 1. 通过 arthas 解决实现测试环境.性能测试环境以及生产环境性能问题分析工具的问题. 2. 通过使用 jad.mc.redefine 功能 ...