最近发现自己C语言还有一些不懂的地方,那些年实在惭愧,赶紧学习,这期找到不懂的地方是enum枚举型
目录
ENUM 枚举型
定义
- Enum,枚举类型是一组数据类型,它由一组名为元素,成员,枚举或枚举的命名值组成方式。1
优点
1. 提高程序的可读性
- 这也与define相似,有写字总是比1和0这种东西要来的清晰。
2. 使编译器强化语义的正确
- 例如
myColor = RED
如果设置为myColor = TRIANGLE
语义就不正确了。
如果我不用enum定义,我将RED
定义为int,值为0,TRIANGLE
也是一样。
则上述赋值myColor = TRIANGLE
,就不会有任何错误提示。
定义形式
与结构体相似的三种方法
1. 直接定义名字 没有变量
enum signal {RED,YELLOW,GREEN};
这种方法就相当于多个#define
2. 直接定义变量—匿名变量
enum {RED,YELLOW,GREEN} a;
//...
//使用方法:变量a只能是三个中的一个
a=RED;
定义了变量之后,变量的值只能是之前声明的三个中的一个,即RED,YELLOW,GREEN中的一个
3. 先声明,后定义变量
enum signal{RED,YELLOW,GREEN};
//...
signal a;
a = RED;//三个中的一个值
同上面两个方法差不多,相当于两个方法合起来
用法
1.隐式调用
enum week{
MON, //=0
TUE, //=1
WED, //=2
THU, //=3
FRI, //=4
SAT, //=5
SUN //=6
}
2.显示调用。只要有一个赋值了,后面就按顺序排下去。注意必须是整数
enum week{
MON=1, //=1
TUE, //=2
WED, //=3
THU, //=4
FRI, //=5
SAT, //=6
SUN //=7
}
3.也算显示调用吧,就是按照自己需求定义(这就跟define差不多了)
enum mycolor{
BLACK=0, //0
GREY, //1
RED=0, //0
PINK, //1
BLUE=0, //0
LIGHTBLUE,//1
BROWN=9, //9
PURPLE=8 //8
}
注意点
- 枚举值(ENUM)是常量,不是变量。不能在程序中用赋值语句再对它赋值。只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。若要硬来,就用强制类型转换。2
- 对于枚举,只定义了赋值运算符,没有为枚举定义算术运算3
#include <stdio.h>
enum WEEKDAYS{
MON=1,
TUE,
WED,
THU,
FRI,
SAT,
SUN
} A;//先定义好MON~SUN为1~7
void main()
{
int num = 6;
int errnum = 9;
int temp;
/*正常赋值*/
A = SUN; //给枚举变量A赋值
num = A;//赋值成功,说明enum是可以赋值给int
/*强制类型转换*/
A = (WEEKDAYS)num;//可以赋值
A = (WEEKDAYS)num;//不可以赋值
}
所以,简略的例子,说明了,enum是可以可以自动转换为int,然后赋值给int;int可以强制转换为enum,但是必须是枚举定义(如上例的WEEKDAYS)里面的
个人体会
我一般都是把他当作一个归类工具,比如将错误类型归类。仅供参考吧哈
enum err_type{
DATA_ERR=0,
TIME_ERR=0,
//....等等其他错误
}
讲真如果,我没有发现CSDN的Markdown编辑器,我可能要放弃他了…