那些年我还没有学过的C语言之Enum

最近发现自己C语言还有一些不懂的地方,那些年实在惭愧,赶紧学习,这期找到不懂的地方是enum枚举型


首先还是给出参考链接->Link1&Link2 感谢帮助!


目录

ENUM 枚举型

定义

  • Enum,枚举类型是一组数据类型,它由一组名为元素,成员,枚举或枚举的命名值组成方式。1

优点

1. 提高程序的可读性

  • 这也与define相似,有写字总是比1和0这种东西要来的清晰。

2. 使编译器强化语义的正确

  • 例如
    myColor = RED 如果设置为myColor = TRIANGLE语义就不正确了。
    如果我不用enum定义,我将RED定义为int,值为0TRIANGLE也是一样。
    则上述赋值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
}

注意点

  1. 枚举值(ENUM)是常量,不是变量。不能在程序中用赋值语句再对它赋值。只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。若要硬来,就用强制类型转换2
  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编辑器,我可能要放弃他了…

猜你喜欢

转载自blog.csdn.net/lo_heng/article/details/79231118