很多初学者对枚举(enum)感到迷惑,或者认为没什么用,其实枚举(enum)是个很有用的数据类型。

一、枚举类型的使用方法

一般的定义方式如下:
enum enum_type_name
{
   ENUM_CONST_1,
   ENUM_CONST_2,
   ...
   ENUM_CONST_n
} enum_variable_name;

注意:enum_type_name 是自定义的一种数据数据类型名,而enum_variable_name 为enum_type_name类型的一个变量,也就是我们平时常说的枚举变量。实际上enum_type_name类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即enum_type_name 类型的变量enum_variable_name 只能取值为花括号内的任何一个值,如果赋给该类型变量的值不在列表中,则会报错或者警告。ENUM_CONST_1、ENUM_CONST_2、...、ENUM_CONST_n,这些成员都是常量,也就是我们平时所说的枚举常量(常量一般用大写)。

enum 变量类型还可以给其中的常量符号赋值,如果不赋值则会从被赋初值的那个常量开始依次加1,如果都没有赋值,它们的值从0 开始依次递增1。如分别用一个常数表示不同颜色:
enum Color
{
   GREEN = 1,
   RED,
   BLUE,
   GREEN_RED = 10,
   GREEN_BLUE
}ColorVal;

其中各常量名代表的数值分别为:
   GREEN = 1
   RED = 2
   BLUE = 3
   GREEN_RED = 10
   GREEN_BLUE = 11

二、枚举与#define 宏的区别

下面再看看枚举与#define 宏的区别:
1)#define 宏常量是在预编译阶段进行简单替换。枚举常量则是在编译的时候确定其值。
2)一般在编译器里,可以调试枚举常量,但是不能调试宏常量。
3)枚举可以一次定义大量相关的常量,而#define 宏一次只能定义一个。

留两个问题:
A),枚举能做到事,#define 宏能不能都做到?如果能,那为什么还需要枚举?
B),sizeof(ColorVal)的值为多少?为什么?

C语言enum关键字相关推荐

  1. c语言字母表关键字,读书笔记-C语言关键字

    001 关键字 C语言一共32个关键字 1. 声明和定义 在开始认识关键字前,必须要明白什么是声明,什么事定义: 定义:(编译器)创建一个对象,为这个对象分配一段内存并给他取上一个名字.在一个作用域内 ...

  2. C语言 enum和typedef enum的区别

    在了解enum和typedef enum的区别之前先应该明白typedef的用法和意义. C语言里typedef的解释是用来声明新的类型名来代替已有的类姓名,例如: typedef int CHANG ...

  3. c语言中switch语句流程图_C语言:C语言保留字(关键字)

    保留字(reserved word) 保留字又称关键字. 指在高级语言中已经定义过的字,使用者不能再将这些字作为变量名或过程名使用. 每种程序设计语言都规定了自己的一套保留字. 例如:BASIC语言规 ...

  4. Java分享笔记:自定义枚举类 使用enum关键字定义枚举类

    在JDK1.5之前没有enum关键字,如果想使用枚举类,程序员需要根据Java语言的规则自行设计.从JDK1.5开始,Java语言添加了enum关键字,可以通过该关键字方便地定义枚举类.这种枚举类有自 ...

  5. C语言的关键字 详解

    一.C语言的关键字 C语言中的32个关键字及其意思如下: 由 ANSI 标准定义的C 语言关键字共32 个.根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两大类. 1.数据类型关键字 ...

  6. C语言标准ANSI C、C语言的特点、C语言的关键字(32个)

    C语言标准:通常称为ANSI C. C语言的特点: 1.C语言简洁.紧凑,使用方便.灵活.ANSI C一共只有32个关键字,9种控制语句,程序书写自由,主要用小写字母表示,压缩了一切不必要的成分. 2 ...

  7. C语言的关键字和标识符

    一.关键字                  关键字是具有特定含义的.专门用来说明C语言的特定成分的一类单词.          C语言的关键字都是用小写字母书写的,不能用大写字母书写.关键字不能用于 ...

  8. 对C语言的关键字及部分关键字用法的简单理解

    小盆友,你是否有很多问号??? C语言的关键字是什么?有哪些?他们如何用??? 我也在学习中迷惑着,所以把今天学习到的稍微做一下总结,方便自己以后的复习(目前学到的比较粗浅,以后还需要深入学习). 哪 ...

  9. c语言中关键字的含义,c语言中的关键字有哪些?有什么含义?

    c语言中的关键字有哪些?有什么含义? 发布时间:2020-04-23 09:33:30 来源:亿速云 阅读:174 作者:小新 这篇文章主要介绍了c语言中的关键字有哪些?有什么含义?,具有一定借鉴价值 ...

最新文章

  1. 密码学摘要算法之MD5
  2. java跳转语句包含goto_Java 语句标签实现goto跳转
  3. php关系运算符语句,PHP基础__运算符和逻辑语句(三)
  4. c语言删除文件中的数据_第20问:删除了数据文件,该往哪个方向逃跑
  5. c++11 auto 类型说明符详解
  6. 【kali】kali设置burpsuite抓包dvwa
  7. python matplotlib使用ax绘图
  8. 动态路由RIP的简易配置
  9. 20200507:力扣151周赛下
  10. sql python r_Mode Studio,支持Python,R和SQL的云数据分析利器
  11. 全国各地车牌代码整理出数据库表,直接生成表
  12. 详解汽轮机的TSI系统
  13. PHP运行的环境安装
  14. JetPack知识点实战系列十:ExoPlayer进行视频播放的实现
  15. Mysql主从同步报错解决:Fatal error: The slave I/O thread stops because master and slave have equal..
  16. 编写Java程序,以继承和多态思想模拟饲养员喂养不同动物的不同行为
  17. 聊聊在深圳互联网公司工作一年后,回西安感受到的行业差距
  18. 软件项目管理案例教程第4版课后习题第一章
  19. 四种物联网卡计算模式
  20. 基于华为eNSP的中小企业办公园区网络规划与设计

热门文章

  1. 一步步编写操作系统80 扩展内联汇编1
  2. python程序框架的描述_简单介绍Python下自己编写web框架的一些要点
  3. 解决Hbase输入list,创建表报错,输入status可以,org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: S
  4. REVERSE-PRACTICE-BUUCTF-6
  5. Spring Boot Actuator监控关闭
  6. java隐藏密钥_java – 在Android中隐藏密钥库密码的最佳方法是什么?
  7. CCNA-第七篇-思科私有路由协议-EIGRP-初级
  8. 【LeetCode 986】 区间列表的交集(区间交集)
  9. 【牛客 - 369F】小D的剑阵(最小割建图,二元关系建图,网络流最小割)
  10. 【FZU - 2140 】Forever 0.5 (计算几何,构造)