enum枚举

enum枚举

枚举就我自身来说很少用到,全都交给#define解决了,但最近似乎遇见的越来越多,索性就看一看是何方妖孽!(有时候,很奇怪,以前从未注意的问题会在某一天突然成批的出现在你眼前,勾起你的好奇)

enum是C语言中的一个关键字,enum叫枚举数据类型,枚举数据类型描述的是一组整型值的集合(这句话其实不太妥当),枚举型是预处理指令#define的替代,枚举和宏其实非常类似,宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值,

enum number{ one=1, two=2, three=3,} ;
enum data    {four=4,five=6,six=6,};

枚举的正常使用

 

#include <stdio.h>
#include <stdlib.h>
int main()
{

    enum color { red = 1, green=4, blue=6 };
/* 枚举一般直接可以使用不用中间变量 */

// enum color favorite_color;
  int favorite_color;

/* ask user to choose color */
    printf("请输入你喜欢的颜色: (1. red, 4. green, 6. blue: ");
    scanf_s("%d", &favorite_color);

    /* 输出结果 */
    switch (favorite_color)
    {
    case red:
        printf("你喜欢的颜色是红色");
        break;
    case green:
        printf("你喜欢的颜色是绿色");
        break;
    case blue:
        printf("你喜欢的颜色是蓝色");
        break;
    default:
        printf("你没有选择你喜欢的颜色");
    }

    return 0;

 

 

枚举可以赋值

#include <stdio.h>

enum number{ one=1, two=2, three=3,};
int  main()
{
    enum number one = (enum number)10;
    printf("%d\n", one);
    printf("%d\n", two);
    printf("%d\n", three);
    return 0;
}

赋值时一定要注意类型转换(enum number)

枚举可以直接使用枚举的变量(与#define相似)

枚举无法遍历

当枚举成员变量按顺序+1时可以使用遍历

#include <stdio.h>

enum number{ one=1, two=2, three=3,};

int  main()
{
    int  num = 0;
    for (num = one; num <= 3; num++)
        {
       printf("%d\n", num);

    }
   return 0;
}        

当枚举变量为任意数时绝对不能使用

#include <stdio.h>

enum number{ one=4, two=15, three=26,};
e
int  main()
{
    int  num = 0;

    for (num = one; num <= three; num++)
    {

        printf("%d\n", num);

    }return 0;
}

运行结果

那把three给改成3呢?

 

所以用枚举就别想遍历了 !!!

枚举的大小

一个枚举常量的占的字节数为4个字节,恰好和int类型的变量占的字节数相同,假设把这些枚举常量说明为整型,字符型或其他类型显然是不妥当的,因为枚举类型是一种基本数据类型,而不是一种构造类型,它不能再分解为什么基本类型

注意

在C语言体系里不能存在两个枚举类型里含有名字一样的变量,编译器无法区别。

//这是错误的
enum number { one = 4, two = 15, three = 26, };
enum data    { one =4, two =6, three =6,};

// 当然放在局域没问题

void N()
{
enum number { one = 4, two = 15, three = 26, };
printf("%d",one);
}
void B()
{
enum data    { one =4, two =6, three =6,};
printf("%d",one);
}

但C++,java可以通过构建class绕开障碍

posted @ 2020-04-23 17:14  forup  阅读(389)  评论(0)    收藏  举报