浅谈枚举的作用和用法

1.枚举(Enum)类型特点:

能够列出所有可能的取值,并给它们取一个名字。(一种新的数据类型)
2.枚举(Enum)语法格式:

enum typeName{ valueName1, valueName2, valueName3, ...... };

    注:
            ①typeName是枚举类型的名字。

             (是一个标识符,可以看成这个集合的名字,是一个可选项,即是可有可无的项。)
            ②valueName1, valueName2, valueName3, ......是每个值对应的名字的列表。
            ③枚举类型是一个集合,集合中的元素(枚举成员)是一些命名的整型常量。
            ④枚举类型是预处理指令#define的替代。

    例:(列出一个星期有几天)

enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };

        可以看到,我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues ...... Sun 对应的值分别为 0、1 ...... 6。

        我们也可以给每个名字都指定一个值:(可以人为设定枚举成员的值,从而自定义某个范围内的整数)

enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 }; 

        更为简单的方法是只给第一个名字指定值:

enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };

        这样枚举值就从 1 开始递增,与②的写法是等效的。
      
        枚举是一种类型,通过它可以定义枚举变量:

enum week a, b, c;


        也可以在定义枚举类型的同时定义变量:

enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a, b, c;


        有了枚举变量,就可以把列表中的值赋给它:

enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun };
enum week a = Mon, b = Wed, c = Sat;

  或者:

enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat, Sun } a = Mon, b = Wed, c = Sat;


        注:
     (1)枚举列表中的 Mon、Tues、Wed 这些标识符的作用范围是全局的(严格来说是 main() 函数内部),不能再定义与它们名字相同的变量。
     (2)Mon、Tues、Wed 等都是常量,不能对它们赋值,只能将它们的值赋给其他的变量。
     (3)Mon、Tues、Wed 等都不是变量,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用&取得它们的地址。(枚举的本质)
     (4)枚举和宏其实非常类似:宏在预处理阶段将名字替换成对应的值,枚举在编译阶段将名字替换成对应的值。我们可以将枚举理解为编译阶段的宏。
3.枚举(Enum)的用法:
    ①一般的定义方式如下:
                                                 

enum enum_type_name
{
    ENUM_CONST_1,
    ENUM_CONST_2,
    ...
    ENUM_CONST_n
} enum_variable_name;

注意:

enum_type_name 是自定义的一种数据数据类型名,而enum_variable_name enum_type_name类型的一个变量,也就是我们平时常说的枚举变量。实际上enum_type_name类型是对一个变量取值范围的限定,而花括号内是它的取值范围,即enum_type_name 类型的变enum_variable_name 只能取值为花括号内的任何一个值,如果赋给该类型变量的值不在列表中,则会报错或者警告。ENUM_CONST_1、ENUM_CONST_2、...、ENUM_CONST_n,这些成员都是常量,也就是我们平时所说的枚举常量(常量一般用大写)。
    ②使用枚举类型对变量进行声明:
        方法一:枚举类型的定义和变量的声明分开                    

enum DAY                                                                            
{                                                                                                                                
MON=1, TUE, WED, THU, FRI, SAT, SUN                            
};                                                                                       
enum DAY yesterday;                                                        
enum DAY today;                                                                                        
enum DAY good_day, bad_day;

        方法二:类型定义与变量声明同时进行

enum             //与上面定义不同的是:此处的标号DAY被省略,这是允许的
{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
}workday;        //变量workday的类型为枚举型enum(或enum DAY)
workday = MON;

方法三:用typedef关键字将枚举类型定义成别名,并利用该别名进行变量声明

typedef enum workday    //此处的workday可省略,或者改成其它名字,不会影响后面
{
    MON=1, TUE, WED, THU, FRI, SAT, SUN
} workday;              //此处的workday为枚举类型enum workday的别名,类似于int
workday today, tomorrow;//变量today和tomorrow的类型为枚举型workday,也即enum workday
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值