精华内容
下载资源
问答
  • C语言枚举类型

    2021-02-01 16:15:58
    枚举类型枚举是用来做什么的C语言为何需要枚举?宏定义和枚举的区别枚举的定义和使用 枚举是用来做什么的 枚举在C语言中起始是一些符号常量集。直白点说,枚举定义了一些符号,这些符号的本质就是int类型的常量,每...

    枚举是用来做什么的

    枚举在C语言中起始是一些符号常量集。直白点说,枚举定义了一些符号,这些符号的本质就是int类型的常量,每个符号和一个常量绑定,这个符号就表示一个自定义的一个识别码,编译器对枚举的认知就是符号常量所绑定的那个int类型的数字。
    枚举符号常量和器对应的常量数字相对来说,数字不重要,符号才重要。符号对应的数字只要彼此不相同即可,没有别的要求。所以我们一般情况下我们都不明确指定这个符号所对应的数字,而让编译器自动分配。(编译器自动分配的原则是,从0开始依次增加,如果用户自定义了一个值,则从那个值开始往后依次增加。)
    我的理解是,只要这个枚举类型的值是这几个值其中的一种就行,具体数字是几并不关心,判断的时候只用枚举类型里面的元素,并不用数字来判断。

    C语言为何需要枚举?

    C语言没有枚举是可以的,使用枚举起始就是对1、0这些数字进行符号化编码,这样的好处就是编程时可以不看数字而直接看符号。符号的意义是显然的,一眼就可以看出来,而数字所代表的的含义只能从文档和注释中得知。
    宏定义的目的和意义是不用数字而用符号,从这里可以看出,宏定义和枚举类型有内在的联系,宏定义和枚举经常用来解决类似的问题,基本可以互换,但是有些细微的差别。

    宏定义和枚举的区别

    1.枚举是将多个有关联的符号封装在一个枚举中,而宏定义是完全散的。也就是说枚举其实是多选一。
    2.什么情况下用枚举类型?当我们要定义的常量是一个有限集合时,比如一星期七天,一个月三十天,一年十二个月,最适合用枚举来解决。
    3.不能用枚举的情况是定义的常量符号之间无关联,或无限的,这种适合用宏定义。
    总结一下,宏定义先出现,用来解决符号常量的问题,后来人们发现有时候定义的符号常量彼此之间有关联(多选一的关系),用宏定义来做虽然可以但是不贴切,于是发明了枚举来解决这种情况。

    枚举的定义和使用

    所谓枚举是指将变量的值一一列举出来,变量只限于列举出来的值的范围内取值。 定义一个变量是枚举类型,可以先定义一个枚举类型名,然后再说明这个变量是该枚举类型。
    例如: enum weekday{sun,mon,tue,wed,thu,fri,sat};
    定义了一个枚举类型名 enum weekday,然后定义变量为该枚举类型。
    例如: enum weekday day; 当然,也可以直接定义枚举类型变量。
    例如: enum weekday{sun,mon,tue,wed,thu,fri,sat} day;
    还可以用typedef enum{sun,mon,tue,wed,thu,fri,sat}week_day;定义枚举类型别名。
    Week day; 用别名来定义枚举。 其中,sum,mon,…,sat 等称为枚举元素或枚举常量,它们是用户定义的标识符。 需要说明的有以下几点。
    ① 枚举元素不是变量,而是常数,因此枚举元素又称为枚举常量。因为是常量,所以不能对枚举元素进行赋值。
    ② 枚举元素作为常量,它们是有值的,C 语言在编译时按定义的顺序使它们的值为0,1,2,…。 在上面的说明中,sun 的值为 0,mon 的值为 1,…sat 的值为 6,如果有赋值语句 day=mon; 则 day 变量的值为 1。当然,这个变量值是可以输出的。例如: printf ("%d",day); 将输出整数 1。 如果在定义枚举类型时指定元素的值,也可以改变枚举元素的值。例如
    enum weekday{sun=7,mon=1,tue,wed,thu,fri,sat}day; 这时,sun 为 7,mon 为 1,以后元素顺次加 1,所以 sat 就是 6 了。
    ③ 枚举值可以用来作判断。例如: if (day==mon) {…} if (day>mon) {…} 枚举值的比较规则是:按其在说明时的顺序号比较,如果说明时没有人为指定,则第一个枚举元素的值认作 0。例如,mon>sun,sat>fri。
    ④ 一个整数不能直接赋给一个枚举变量,必须强制进行类型转换才能赋值。例如: day=(enum weekday)2; 这个赋值的意思是,将顺序号为 2 的枚举元素赋给 day,相当于workday=tue;

    展开全文
  • C语言枚举类型的大小

    千次阅读 2019-07-12 09:41:22
    enum长度不确定会带来可移植性问题,如果第三方库API接口使用enum类型,编译和调用库时一旦有关enum长度编译器设置不一致,API接口层对数值解析就不匹配。比如上层应用编译时没有用-fshort-enums,默认用4字节...

     

    主流编译器如:gcc、vc、MinGW-gcc等枚举变量均为4字节。少量编译器会根据枚举个数做优化,如只有3个枚举值时,size可能为1。

    enum长度不确定会带来可移植性问题,如果第三方库API接口使用enum类型,编译和调用库时一旦有关enum长度的编译器设置不一致,API接口层对数值的解析就不匹配。比如上层应用编译时没有用-fshort-enums,默认用4字节空间来存储使用enum变量,而编译库时设置了fshort-enums,则库内部此enum size可能为1。当把enum变量地址传进API时,内部只修改变量最低字节,高3字节值无变化(内容随机),API返回时,上层使用的4字节enum变量值就可能随机。(潜规则篇之API接口)
     

    reference:

    http://blog.chinaunix.net/uid-16813896-id-5014131.html

    C陷阱篇之enum默认长度

    https://blog.csdn.net/ipmux/article/details/17334099

     

    展开全文
  • C语言 枚举类型

    2019-09-28 14:06:56
    枚举是 C 语言中一种基本数据类型,它可以让数据更简洁,更易读。 枚举语法定义格式为: enum 枚举名 {枚举元素1,枚举元素2,……}; 接下来我们举个例子,比如:一星期有 7 天,如果不用枚举,我们需要使用 #...

    https://www.runoob.com/cprogramming/c-enum.html

    C enum(枚举)

    枚举是 C 语言中的一种基本数据类型,它可以让数据更简洁,更易读。

    枚举语法定义格式为:

    enum 枚举名 {枚举元素1,枚举元素2,……};

    接下来我们举个例子,比如:一星期有 7 天,如果不用枚举,我们需要使用 #define 来为每个整数定义一个别名:

    #define MON 1 #define TUE 2 #define WED 3 #define THU 4 #define FRI 5 #define SAT 6 #define SUN 7

    这个看起来代码量就比较多,接下来我们看看使用枚举的方式:

    enum DAY
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    };

    这样看起来是不是更简洁了。

    注意:第一个枚举成员的默认值为整型的 0,后续枚举成员的值在前一个成员上加 1。我们在这个实例中把第一个枚举成员的值定义为 1,第二个就为 2,以此类推。

    可以在定义枚举类型时改变枚举元素的值:

    enum season {spring, summer=3, autumn, winter};

    没有指定值的枚举元素,其值为前一元素加 1。也就说 spring 的值为 0,summer 的值为 3,autumn 的值为 4,winter 的值为 5

    枚举变量的定义

    前面我们只是声明了枚举类型,接下来我们看看如何定义枚举变量。

    我们可以通过以下三种方式来定义枚举变量

    1、先定义枚举类型,再定义枚举变量

    enum DAY
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    };
    enum DAY day;

    2、定义枚举类型的同时定义枚举变量

    enum DAY
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    } day;

    3、省略枚举名称,直接定义枚举变量

    enum
    {
          MON=1, TUE, WED, THU, FRI, SAT, SUN
    } day;

    实例

    #include<stdio.h>
    enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN };
    int main()
    { enum DAY day; day = WED; printf("%d",day); return 0; }

    以上实例输出结果为:

    3

    在C 语言中,枚举类型是被当做 int 或者 unsigned int 类型来处理的,所以按照 C 语言规范是没有办法遍历枚举类型的。

    不过在一些特殊的情况下,枚举类型必须连续是可以实现有条件的遍历。

    以下实例使用 for 来遍历枚举的元素:

    实例

    #include<stdio.h> enum DAY { MON=1, TUE, WED, THU, FRI, SAT, SUN } day; int main()
    { // 遍历枚举元素
    for (day = MON; day <= SUN; day++)
    { printf("枚举元素:%d \n", day); } }

    以上实例输出结果为:

    枚举元素:1 
    枚举元素:2 
    枚举元素:3 
    枚举元素:4 
    枚举元素:5 
    枚举元素:6 
    枚举元素:7

    以下枚举类型不连续,这种枚举无法遍历。

    enum
    {
        ENUM_0,
        ENUM_10 = 10,
        ENUM_11
    };

    枚举在 switch 中的使用:

    实例

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
     
        enum color { red=1, green, blue };
     
        enum  color favorite_color;
     
        /* ask user to choose color */
        printf("请输入你喜欢的颜色: (1. red, 2. green, 3. blue): ");
        scanf("%d", &favorite_color);
     
        /* 输出结果 */
        switch (favorite_color)
        {
        case red:
            printf("你喜欢的颜色是红色");
            break;
        case green:
            printf("你喜欢的颜色是绿色");
            break;
        case blue:
            printf("你喜欢的颜色是蓝色");
            break;
        default:
            printf("你没有选择你喜欢的颜色");
        }
     
        return 0;
    }

    以上实例输出结果为:

    请输入你喜欢的颜色: (1. red, 2. green, 3. blue): 1
    你喜欢的颜色是红色

    将整数转换为枚举

    以下实例将整数转换为枚举:

    实例

    #include <stdio.h>
    #include <stdlib.h>
     
    int main()
    {
     
        enum day
        {
            saturday,
            sunday,
            monday,
            tuesday,
            wednesday,
            thursday,
            friday
        } workday;
     
        int a = 1;
        enum day weekend;
        weekend = ( enum day ) a;  //类型转换
        //weekend = a; //错误
        printf("weekend:%d",weekend);
        return 0;
    }

     

    以上实例输出结果为:

    weekend:1

     

    转载于:https://www.cnblogs.com/focus-z/p/11524925.html

    展开全文
  • 1:枚举里面值是常量; 例如 enum color {red,orange,yellow};2:枚举列表中常量默认为0,1,2等等 例如 enum color {red,orange,yellow}; 常量值默认为0,1,23: 枚举列表常量值是可以指定,且指定值后的枚举值...
    1:枚举里面的值是常量;    例如 enum color {red,orange,yellow};

    2:枚举列表中的常量默认为0,1,2等等  例如 enum color {red,orange,yellow};  常量值默认为0,1,2

    3:  枚举列表常量值是可以指定的,且指定值后的枚举值将递增   例如enum color {red,orange=10,yellow}; yellow=11

    4:  在C语言中枚举可以递增 运算符++,而C++中需要强制转换定义为int再运算符++

     

    enum用法例子如下

     

    #include<stdio.h>
    #include<string.h>
    enum  specturm {red,orange,yellow,green,blue,violet};
    const char *colors[]={"red","orange","yellow","green","blue","violet"};
    #define LEN 30
    int main(void)
    {
        
    char choice[LEN];
        
    int color;
        
    int  color_is_found=0;
        puts("Enter a color (empty line to quit): ");
        
    while(gets(choice)!=NULL&&choice[0]!='\0')
        {
            
    for(color=red;color<=violet;color++)
            {
                
    if(strcmp(choice,colors[color])==0)
                {
                    color_is_found=1;
                    
    break;
                }
            }
            
    if(color_is_found)
            
    switch(color)
            {
                
    case 0:puts("Roses are red");break;
                
    case 1:puts("Poppies are orange");break;
                
    case 2:puts("Sunflowers are yellow");break;
                
    case 3: puts("Grass is green");break;
                
    case 4:puts("Bluebells are blue");break;
                
    case 5:puts("Violets are violet");break;
            }
            
    else printf("I don't know about the color %s.\n",choice);
            color_is_found=0;
            puts("Next color,please(empty line to quit): ");
        }
        puts("Goodbye!");
        
    return 0;
    }

    转载于:https://www.cnblogs.com/xiaobaigang/archive/2011/05/27/2059845.html

    展开全文
  • C语言枚举类型和函数枚举函数 枚举 介绍: 枚举是C语言中一种构造类型数据; 枚举是一组常量集合; 对于只有几个有限特定数据,可以使用枚举,数据过多就不适合使用了; 定义格式: 方式一: 1)先定义枚举...
  • c语言枚举类型

    2016-07-22 01:31:08
    为什么使用枚举类型? 在一些程序中,有一些变量只有少数几个有意义值,例如:一个布尔变量只有两个值,真和假,又如:在游戏中用户操作方向只有4个上下左右。 可以使用宏定义方式来实现: #define ...
  • 本节,我们看看对于枚举类型C语言编译器是如何解析。我们使用下面实例去实现语法解析和类型系统建立:enum tag {a, b, c = 5, d} x;上面枚举定义会被C编译器转义成下面形式:enum tag; int x; int a = 0...
  • 枚举enum就是英文enumerate缩写,也就是列举、排列说明意思。枚举类型C语言一种特殊类型,枚举类型可以让我们程序使用一些固定长度和固定数值变量值范围。
  • C语言枚举类型深入讲解,超详细:enum经常使用的三种方法;枚举本质;枚举和宏定义对比分析;Linux内核中枚举类型及使用技巧分析;使用枚举需要注意一些细节,在这篇文档中都会详细讲解。
  • C语言枚举类型(Enum)

    多人点赞 2018-10-18 19:59:32
    C语言枚举类型(Enum) 在实际编程中,有些数据取值往往是有限,只能是非常少量整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门...
  • C语言枚举类型详解

    2020-02-27 10:35:31
    在编程时候,有些数据取值往往是有限,只能是非常少量整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。 以每周七天为例,...
  • 假设我们要开发一款游戏,游戏中有角色A“攻击”... 对于1、2、3这样数值,是一个常量,而且表示一定意义,那么,我们可以使用“宏定义”来表示,例如: #define READY_ACT 1 #define START_ACT 2 #define...
  • 定义方法 typedef enum  {  monday,  tuesday,  ...   }weekdays;   在使用中只要定义枚举类型就可以了,如下:weekdays today=monday; 此时today值是0;
  • 1,枚举变量传参时如果是其他变量类型需要强转 举例说明: typedef enum_type { ONE = 0, TWO, }ENUM_TYPE; void Fun(int a ,ENUM_TYPE enum_c) { //功能实现 } int main() { int i,j; fun(i,(ENUM_TYPE)...
  • C语言枚举类型的使用详解

    千次阅读 2016-12-21 22:10:33
    1. 枚举定义枚举类型定义一般形式为:  enum 枚举名{ 枚举值表 }; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。 例如:   该枚举名为weekday,枚举值共有7个,即一周中七天。...
  • 1.使用符号去表示数字,不是直接使用数字。数字降低了代码可读性。 #include<stdio.h> //常量类型 const int blue = 1, red = 2, green = 3; int main(int argc, char const *argv[]) { int color = -1; ...
  • 参数参数描述enum定义枚举类型使用的关键字。枚举名枚举变量名。枚举元素1,枚举元素2,枚举元素3枚举元素列表。说明我们使用 enum 关键字,定义了一个枚举变量,该枚举变量有三个元素。C语言枚举enum变量定义...
  • 枚举定义枚举类型定义一般形式为:enum 枚举名{ 枚举值表 }; 在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。例如: 该枚举名为weekday,枚举值共有7个,即一周中七天。凡被说明为weekday类型变量...
  • 在实际编程中,有些数据取值往往是有限,只能是非常少量整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。 以每周七天为例,...
  • 当我们在编程中遇到定义一些固定长度或范围数值时,可以考虑使用枚举类型使用枚举可以让我们程序可读性更强、看起来更加直观。举个例子,如果我们在编程中需要使用数字0~6分别表示星期日~星期六,程序可读性...
  • 在实际编程中,有些数据取值往往是有限,只能是非常少量整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。 以每周七天为例,...
  • 1、枚举类型    当程序中需要给某一个变量值,限定取值范围的时候,可以使用枚举    1)枚举类型 ... enum 枚举类型名{枚举值1,值2,值3,...};... 2)枚举类型的变量    enum SEX{man,women,yao}ise
  • 在实际编程中,有些数据取值往往是有限,只能是非常少量整数,并且最好为每个值都取一个名字,以方便在后续代码中使用,比如一个星期只有七天,一年只有十二个月,一个班每周有六门课程等。 以每周七天为例,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,019
精华内容 407
关键字:

c语言枚举类型的使用

c语言 订阅