您的位置:首页 > 其它

枚举(一)

2015-06-06 19:50 309 查看

基础

        基本概念和Java类似,也是使用enum关键字。如下

<pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" color:#808000;">enum</span><span style=" color:#c0c0c0;"> </span><span style=" color:#800080;">weekday</span>{


mon,tue,wed,thu=5,fri,sat,sun

};//注意这里要加分号


int main()

{

enum weekday a = wed;

enum weekday b = fri;

printf("%d %d\n",a,b);//输出的值分别是2,6

return -1;

}



        在定义枚举中枚举常量的默认取值是该常量的前一个常量值+1,最前面的常量如果没有赋值那么它就是0。上面的wed是第三个,mon的值是0,所以它的值是2。thu被赋值为5,所以fri的值是6。

        按上述方式定义完枚举后,再定义该枚举的枚举常量时每一次都需要写enum,很是麻烦。可以通过typedef关键字为枚举取一个新名字,如下

typedef enum weekday{
mon,tue,wed,thu=5,fri,sat,sun
} Weekday;//为该枚举取一个新名字

int main()
{
Weekday b = sat;//使用枚举的新名字进行定义
if(b == sat){
printf("%s","yes");
}else{
printf("%d ",b);
}
return 0;
}


        也可以直接在声明枚举类型的时候定义枚举变量。如

<pre style="margin-top: 0px; margin-bottom: 0px;"><span style=" color:#808000;">enum</span><span style=" color:#c0c0c0;"> </span><span style=" color:#800080;">weekday</span>{


mon,tue,wed,thu=5,fri,sat,sun

} c;//注意这里要加分号


        此时这个变量c的使用也是和上面一样。当然,这里也可以声明两个变量,只需要在c后面用逗号隔开即可。而且,按该种方式进行声明时也可以直接为枚举变量赋值。如为上面的c赋值,就可以直接在声明c的时候写成c=mon。

        除了上述两种定义方式外,还可以省略枚举名(即省略上面的weekday),如

enum {
mon,tue,wed,thu=5,fri,sat,sun
} b;//相当于java的匿名内部类
        这样定义枚举时,只能使用已定义过的枚举变量b,而不能再使用它定义新的枚举变量。

        枚举中的元素是常量,因此除了可以在定义时赋值外,在别的地方无法在给它赋值。并且,枚举常量的值必须是int类型的常量,如将上面的thu="aaa"便会报错:

error: enumerator value for 'thu' is not an integer constant
        由于枚举常量的值是int类型的,所以它可以用来比较,用在switch中等。

        在程序中,会使用枚举常量为枚举类型的变量赋值,并且枚举常量是int类型的数个,但最好不要直接使用int类型的数字为枚举常量直接赋值。

        在上面为枚举变量进行赋值时可以发现,直接是使用了枚举常量的名作为右值,而没有指定该名属性哪一个枚举。因此,为了不混淆,不同的枚举中不能存在同名的枚举常量。如枚举a中定义了名为a1的枚举常量,那么b中就不能定义名为a1的枚举常量了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: