枚举类型:
意义:它属于基本类型,并且需要指定这个类型数据的值域(由若干个大于等于0的数组成)就是一个常量值的集合,每个常量都必须大于等于0,且不能超出signed int 的大小范围。
该类型的变量仅具有一个空间,它的枚举成员代表的是定义枚举类型时它的值的范围,而不是指枚举变量的空间里有多个成员。
除此之外,我们还必须给这个指定值域的每个常量值绑定一个符号常量,就如同宏定义一样,只不过不同的是,以后给枚举变量都只能用这个符号常量来赋值,而不能用实际的值域范围内的常量值来赋值了。所以出现枚举的意义是定义一个具有实际意义的变量,且其值域按实际当中的给定,枚举变量的值只能用具有代表实际意义的符号常量来表示
值域:枚举默认类型是int,从0开始;
其值域的表示由枚举成员来表示,每个枚举成员关联一个常数值,并且多个枚举成员可以关联同一个关联值。
如:enum Color
{ Red, Green, Blue, Max = Blue }
枚举成员常数值的赋予方式:显式赋与 或 隐式赋予
显式:如果枚举成员的声明中具有“常数表达式”初始值设定项,则该常数表达式的值(它隐式转换为枚举的基础类型)就是该枚举成员的关联值,且显示赋值 的大于0的int常量(且必须在值域范围内),不能有负数。
隐式:如果枚举成员的声明不具有初始值设定项,则它的关联值按下面规则隐式地设置:
a、如果枚举成员是在枚举类型中声明的第一个枚举成员,则它的关联值默认为零。
b、否则,枚举成员的关联值是通过将前一个枚举成员(按照文本顺序)的关联值加 1 得到的。并且增加后的值必须还在该基础类型可表示的值的范围 内;否则,会出现编译时错误
注意:允许多个枚举成员绑定相同的值,并不会引起冲突。
如显式赋值:enum Color
{ Red = -1, Green = -2, Blue = -3 };
产生编译时错误,原因是常数值 -1、-2 和 –3 不在基础整型 uint 的范围内。
如隐式赋值:enum Color
{ Red, Green = 10, Blue }
则:Red = 0 Green = 10 Blue = 11
原因如下:
枚举成员 Red 被自动赋予零值(因为它不具有初始值设定项并且是第一个枚举成员)。
枚举成员 Green 被显式赋予值 10。
枚举成员 Blue 被自动赋予比文本上位于它前面的成员大 1 的值。
定义变量:和结构体类型一样,可以在定义类型的时候同时定义变量并初始化,也可以单独定义:
enum Color{ Red, Green = 10, Blue }color1=Blue;//enum Color为枚举类型,color为变量;
enum Color color2;//color2也是枚举变量,只不过因为还没有赋初值,所以此时的color若为全局的则为0,若局部的则为随机值;
也可以和结构体类型一样,使用typedef进行取别名 :
typedef enum Color{ Red, Green = 10, Blue }Color;//Color此时为类型名;
Color color3 = Red;//color3也为变量,并且赋了初值。
使用:枚举变量和一般变量一样使用,Color就是变量名。
#include<stdio.h>
typedef enum Color{ Red, Green = 10, Blue }Color;
Color color;
int main(void)
{
printf("%d\n",color);
color = Green;
if(color == Green)
printf("this is %d\n",color);
return 0;
}
/*
输出:
0
this is 10
*/
还可以创建枚举变量数组:
#include<stdio.h>
typedef enum Color{ Red, Green = 10, Blue,Yellow=9,White,Black,Purple }Color;
int main(void)
{
Color color[7] = {Red,Green,Blue,Yellow,White,Black};
color[6]=Red;
int i = 0;
for( ;i<7;i++)
printf("%d ",color[i]);
printf("\n");
}
/*
输出:0 10 11 9 10 11 0
说明可以允许多个枚举成员绑定相同的值,并不会引起冲突
*/
枚举变量和一般变量一样使用,Color就是变量名,可以进行算术、逻辑、大小比较等运算。
#include<stdio.h>
typedef enum Color{ Red, Green = 10, Blue,Yellow=9,White,Black,Purple }Color;
int main(void)
{
Color color[7] = {Red,Green,Blue,Yellow,White,Black};
color[6]=Red;
int i = 0;
for( ;i<7;i++)
printf("%d ",color[i]);
printf("\n");
if(color[1] == color[4])
{
i = color[5]-color[1];
printf("%d\n",i);
}
}
/*
输出:
0 10 11 9 10 11 0
1
说明可以允许多个枚举成员绑定相同的值,并不会引冲突,
并且允许枚举变量进行同样一般变量的关系运算、算术运算等运算。
*/
注意:不能直接将值域范围内的整数值直接赋予枚举型变量,如Color = 11;则是错的!!!
枚举变量和一般变量一样使用,Color就是变量名,可以进行算术、逻辑、大小比较等运算。
enum枚举变量应用于询问实例:
/*
只是显示了大概的流程和框架,具体全面的实现没有全部写出来
*/
#include<stdio.h>
enum operation{ADD,DELETE,ISIN};
int go_on(operation op);
int main(void)
{
while(go_on(ADD))
{
add_fun();
}
while(go_on(DELETE))
{
add_fun();
}
while(go_on(ISIN))
{
add_fun();
}
}
int go_on(operation op)
{
int i;
switch(op)
{
case ADD:
printf("go on add ? yes(1) , no(0):\n");
break;
case DELETE:
printf("go on delete ? yes(1) , no(0):\n");
break;
case ISIN:
printf("go on isin ? yes(1) , no(0):\n");
break;
default:
printf("not the legal !\n");
return 0;
}
scanf("%d",&i);
return i==1;
}
参考来源:http://www.cnblogs.com/rene1018/archive/2009/03/17/1414658.html