C中的枚举类型及一些用法

  在C中定义了一种特殊的数据类型:枚举。但这并不是C的首创,之前Pascal有,C之后的Java也有,但是C的枚举类型并不是那么的好用。今天在看视频的时候,翁恺老师正好在讲枚举,也就在此总结一下。

  枚举的好处在于它可以使一些数字符号化,然后增强程序的可读性。当然const double pi=3.14这种方法也可以达到这样的效果,但如果很多数字都需要这样的处理,那么枚举就很方便了。

  enum 枚举类型的名字{name0,name1…namen}

  这就是枚举的格式 ,注意枚举中的那些name之类的符号并不是真正意义上的符号,而是整形。如name0到namen,就是0-n-1.(当然我们也可以单独赋特定的值),所以输出和输入枚举类型的时候都需要按照整形来处理。

  如:

#include <stdio.h>
enum COLOR{red,green,blue};
int main()
{
    enum COLOR color;
    scanf("%d",&color);
    printf("%d",color);   //输入和输出仍然是整形数据,不能输入字符串。。。
    return 0;
}
#include <stdio.h>
enum COLOR{red,green,blue};
void fun(enum COLOR color)
{
    printf("%d",color);
}
int main()
{
    enum COLOR color=red;
    fun(color);
    return 0;
}

永远记住C语言中枚举仍然是按照整形变量来处理的,自然包括输入和输出。

同时枚举类型中可以有一个自动计数的小套路,当我们没有给name0-namen赋值的时候,它的值是0-n-1。所以我们可以用一个无意义叫做Nums的东西放到枚举变量中的最后,用来统计这个枚举变量中一共有多少个量(当然是指有意义的)。

如:

enum COLOR{red,green,blue,Nums};

通过这种方式,也可以运用到for循环等语句结构中。

但我们需要小心的是,如果直接赋一个整形的数据给枚举变量,现在的编译器是不会报错的。但这样的后果也就会导致我们可能得到了一个没有实际意义的结果。因为枚举本身就是为了方便阅读程序。

#include <stdio.h>
enum COLOR{red=1,green,blue};
void fun(enum COLOR color)
{
    printf("%d\n",color);
}
int main()
{
    enum COLOR color=red;
    enum COLOR color2=0;
    fun(color);
    fun(color2);
    return 0;
}

如,这里0在COLOR中并没有意义,但是还是会输出一个0。

posted @ 2015-12-15 15:25  小白酷狗  阅读(13719)  评论(0编辑  收藏  举报