zoukankan      html  css  js  c++  java
  • 【转】枚举常量

    1、枚举常量的定义

    enum 枚举类型名{常量1,常量2,常量3,.......};

    例如定义一个星期的枚举常量:enum Week {Mon,Tue,Wed,.....};

    这就定义了一个新的数据类型:Week。

    Week数据类型来源于int类型(默认)。

    Week类型的数据只能有7种取值,它们是:SUNDAY,MONDAY,TUESDAY……SATURDAY。

    其中SUNDAY = 0,MONDAY = 1……SATURDAY = 6。也就是说,第1个枚举值代表0,第2个枚举值代表1,这样依次递增1。

    不过,也可以在定义时,直接指定某个或某些枚举值的数值。比如,对于中国人,可能对于用0表示星期日不是很好接受,不如用7来表示星期天。这样我们需要的个值就是 1,2,3,4,5,6,7。可以这样定义:

    enum Week {MONDAY = 1,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY};

    我们希望星期一仍然从1开始,枚举类型默认枚举值从0开始,所以我们直接指定MONDAY等于1,这样,TUESDAY就将等于2,直接到SUNDAY等于7。

    枚举值,我们就称为枚举常量,因为它一经定义以后,就不可再改变,以下用法是错误的!

    TUESDAY = 10; //错误!我们不能改变一个枚举值的数值。

    用枚举常量来完成表达今天是星期三:

    Week today = TUESDAY;

    2、枚举常量和宏定义的区别与联系

    宏和枚举的主要区别是作用的时间和存储形式不同。宏定义是在编译预处理阶段作用的,也就是在编译预处理时,就会进行宏替换,将程序中的所有宏名替换为所定义的常量名,而枚举则是在程序运行之后才起作用的。宏定义不分配内存空间,而枚举常量存储在数据的静态存储区中(这一点一定要注意)。宏只占用代码段的空间,而枚举除了占用代码段空间外,还耗费CPU资源。

    但是不能说宏就一定比枚举好,因为你定义一大堆的宏总是非常的不方便的。

    3、枚举类型与sizeof运算符

    下面是我在VS2008中的程序:

    #include "stdafx.h"
    #include "stdio.h"

    enum WEEK{Mon,Tue,Wed,Thu,Fri,San,Sun};
    enum Boolean{True,fal};

    int main(int argc, _TCHAR* argv[])
    {
    char c;
    WEEK today;
    Boolean bol;
    printf("size of today is %d ",sizeof(today));
    printf("size of WEEK is %d ",sizeof(WEEK));
    printf("size of Boolean is %d ",sizeof(Boolean));
    printf("size of bol is %d ",sizeof(bol));
    c=getchar();
    return 0;
    }

    运行结果全是:4

    枚举常量 - 蓝天白云 - 乖乖女

    这是为什么呢?

    这是因为枚举量是当做整型量来处理的,所以结果全部为4

    再看下面一段程序:


    #include "stdafx.h"
    #include "stdio.h"

    enum WEEK{Mon,Tue,Wed,Thu,Fri,San,Sun};
    enum Boolean{True,fal};
    struct str1
    {
    enum WEEK{Mon,Tue,Wed,Thu,Fri,San,Sun};
    enum Boolean{True,fal};
    };
    struct str2
    {
    enum WEEK{Mon,Tue,Wed,Thu,Fri,San,Sun} we;
    enum Boolean{True,fal}bl;
    };
    struct str3
    {};
    int main(int argc, _TCHAR* argv[])
    {
    char c;
    WEEK today;
    Boolean bol;
    str1 str1;
    str2 str2;
    str3 str3;
    printf("size of today is %d ",sizeof(today));
    printf("size of WEEK is %d ",sizeof(WEEK));
    printf("size of Boolean is %d ",sizeof(Boolean));
    printf("size of bol is %d ",sizeof(bol));
    printf("size of str1 is %d ",sizeof(str1));
    printf("size of str2 is %d ",sizeof(str2));
    printf("size of str3 is %d ",sizeof(str3));

    printf("%d ",&str1);
    printf("%d ",&str2);
    printf("%d ",&str3);
    c=getchar();
    return 0;
    }

    定义了三个结构体str1,str2和str3,在结构体一中没有定义任何变量,只定义了枚举常量,在结构体二中定义了变量,结构体三直接为一个空结构体,那么运行结果如何呢?

    枚举常量 - 蓝天白云 - 乖乖女

    为什么结构体一和结构体三的sizeof都为1呢,这是因为在结构体1中实际上没有定义任何变量,相当于一个空结构体,空结构体有大小为1,因为这个东西还是存在的,所以就返回1。

  • 相关阅读:
    由于信号量apache启动问题
    argument list too long
    Read-only file system处理
    fuser
    strace命令基本用法
    c++ 对vector和deque进行逆序排序问题
    C++ 遍历vector容器的三种方式
    C++ 中关于重复读取ifstream中的内容所需要注意的问题
    C++中的文件写入和读取(文本文件方式,二进制方式)
    Unity DoTween插件 在代码中改变Ease(运动方式)
  • 原文地址:https://www.cnblogs.com/xsl1995/p/4779340.html
Copyright © 2011-2022 走看看