相关文章推荐
安静的回锅肉  ·  springboot Test ...·  10 月前    · 
愉快的铁链  ·  How to properly use ...·  1 年前    · 

1.枚举的作用

枚举在 C 语言中其实是一些符号常量集。枚举定义了一些符号,这些符号的本质就是 int 类型的常量,每个符号和一个常量绑定。这个符号就表示一个自定义好的一个识别码,编译器对枚举的认知就是符号常量所绑定的那个 int 类型的数字。

例如可以使用数字1、2、3、4、5、6、7来代表周一到周末,但是纯数字并不直观,这个时候就可以用枚举:

enum Days
	MON=1,
	TUE,
	WEN,
	THU,
	FRI,
	SAT,
	SUN,
  • 1.枚举中的枚举值都是全局的int型常量,可以直接用printf("%d",MON);来打印。
  • 2.枚举符号常量和其对应的常量数字相对来说,数字不重要,符号才重要。符号对应的数字只要彼此不相同即可,没有别的要求。所以一般情况下我们都不明确指定这个符号所对应的数字,而让编译器自动分配。(编译器自动分配的原则是:从0开始依次增加。如果用户自己定义了一个值,则从那个值开始往后依次增加)

2.枚举的定义与使用

1.分别定义类型和变量

// 定义枚举类型
enum color{BLUE,GREEN,RED};
//定义枚举变量
enum color a=BLUE;
  • 1.当没有未枚举类型内的符号指定值时,默认从0开始,依次往后+1,于是实际上BLUE=0,GREEN=1,RED=2。
  • 2.定义枚举变量a之后,a可以是BLUE,GREEN,RED中的某一个,并且a实际上也是一个整型的值。

2.定义类型的同时定义变量

enum color{BLUE=24,GREEN,RED}a,b;
  • 当只给枚举类型内的第一个符号指定值时,后面的符号会默认依次往后+1,于是实际上BLUE=24,GREEN=25,RED=26。

3.枚举类型名color是可要可不要的,也就是说2里面的代码也可以这样写:

enum {BLUE=24,GREEN=33,RED=66}a,b;
  • 可以直接给枚举类型内的符号赋上任意值。

4.使用typedef定义枚举类型

typedef enum {BLUE=24,GREEN,RED}color;

5.使用typedef定义枚举类型并在后面使用别名进行变量定义

typedef enum color{BLUE=24,GREEN,RED}a;

两个不同的结构体类型中成员名可以一样,但是两个enum中的成员名不可以相同,这是因为在结构体中,访问一个成员的方法是结构体名.成员名,但是enum中直接就是成员名,因此如果两个枚举类型中成员名一样,编译器无法分辨出到底该访问哪一个枚举中的成员。

3.C语言为何需要枚举

C语言没有枚举是可以的,因为使用枚举其实就是对0、1等int型数字进行符号化编码,这样的好处就是编程时可以不用看数字而直接看符号。符号的意义是显然的,一眼可以看出,而数字所代表的含义则需要去看文档或者注释。

宏定义的目的和意义是:不用数字而用符号。从这里可以看出:宏定义和枚举有内在联系。宏定义和枚举经常用来解决类似的问题,他们俩基本相当可以互换,但是有一些细微差别。

4.宏定义和枚举的区别

枚举是将多个有关联的符号封装在一个枚举中,而宏定义是完全散乱的,也就是说枚举其实是多选一。

当我们要定义的常量是一个有限集合时(譬如一星期有7天,譬如一个月有31天,譬如一年有12个月····),最适合用枚举。(其实宏定义也行,但是枚举更好)在不能用枚举的情况下(定义的常量符号之间无关联,或者无限的)用宏定义。

  • 总结:宏定义先出现,用来解决符号常量的问题;后来人们发现有时候定义的符号常量彼此之间有关联(多选一的关系),用宏定义来做虽然可以但是不贴切,于是乎发明了枚举来解决这种情况。
C++学习笔记:enum枚举1.C语言中的枚举1.1 枚举的作用1.2 枚举的定义与使用1.3 C语言为何需要枚举1.4 宏定义和枚举的区别2.C++中的枚举3.关于枚举的3个小细节1.C语言中的枚举1.1 枚举的作用枚举在C语言中其实是一些符号常量集。枚举定义了一些符号,这些符号的本质就是int类型的常量,每个符号和一个常量绑定。这个符号就表示一个自定义好的一个识别码,编译器对枚举的认知就是符号常量所绑定的那个int类型的数字。例如可以使用数字1、2、3、4、5、6、7来代表周一到周末,但是纯数字
Java 枚举类和自定义枚举类和enum声明及实现接口1.枚举类1.枚举类的属性2.自定义枚举类2.Enum枚举类3.实现接口的枚举类 1.枚举类 JDK1.5之前需要自定义枚举类 JDK 1.5 新增的 enum 关键字用于定义枚举类 若枚举只有一个成员, 则可以作为一种单例模式的实现方式 1.枚举类的属性 枚举类对象的属性不应允许被改动, 所以应该使用 private final 修饰...
用法一:常量 在JDK1.5之前,我们定义常量都是:public static final....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。 Java代码 publ... 枚举是一种用户定义的数据类型,它用关键字enum以如下语法来声明: enum 枚举类型名字{名字0,.....,名字n}; 枚举类型名字通常并不真的使用,要用的是在大括号里的名字,因为它们就是常量符号,它们的类型固定为int,值依次从0到n,如名字0的值即为0,名字1的值即为1,名字n的值即为n。 当需要一些可以排列起来的常量值时,定义枚举的意... 一、枚举的概念 枚举C语言的一种基本数据类型,并不是构造类型,它可以用于声明一组常数。当一个变量有几个固定的可能取值时,可以将这个变量定义为枚举类型。比如,你可以用一个枚举类型的变量来表示季节,因为季节只有4种可能的取值:春天、夏天、秋天、冬天。 二、枚举类型的定义