enum枚举类型——基本类型

枚举类型:

意义:它属于基本类型,并且需要指定这个类型数据的值域(由若干个大于等于0的数组成)就是一个常量值的集合,每个常量都必须大于等于0,且不能超出signed int 的大小范围。

    该类型的变量仅具有一个空间,它的枚举成员代表的是定义枚举类型时它的值的范围,而不是指枚举变量的空间里有多个成员

    除此之外,我们还必须给这个指定值域的每个常量值绑定一个符号常量,就如同宏定义一样,只不过不同的是,以后给枚举变量都只能用这个符号常量来赋值,而不能用实际的值域范围内的常量值来赋值了。所以出现枚举的意义是定义一个具有实际意义的变量,且其值域按实际当中的给定,枚举变量的值只能用具有代表实际意义的符号常量来表示

值域:枚举默认类型是int,从0开始;

      其值域的表示由枚举成员来表示,每个枚举成员关联一个常数值,并且多个枚举成员可以关联同一个关联值

      如:enum Color

          { Red, Green, Blue, Max = Blue }

      枚举成员常数值的赋予方式:显式赋与 或 隐式赋予

             显式如果枚举成员的声明中具有“常数表达式”初始值设定项,则该常数表达式的值(它隐式转换为枚举的基础类型)就是该枚举成员的关联值,且显示赋值        的大于0的int常量(且必须在值域范围内),不能有负数

     隐式如果枚举成员的声明不具有初始值设定项,则它的关联值按下面规则隐式地设置:

    a、如果枚举成员是在枚举类型中声明的第一个枚举成员,则它的关联值默认为零。 

    b、否则,枚举成员的关联值是通过将前一个枚举成员(按照文本顺序)的关联值加 1 得到的。并且增加后的值必须还在该基础类型可表示的值的范围                     内;否则,会出现编译时错误

              注意:允许多个枚举成员绑定相同的值,并不会引起冲突。

enum weekday{ sun,mou,tue,wed,thu,fri,sat };
enum weekday a,b,c;
或者为:
enum weekday{ sun,mou,tue,wed,thu,fri,sat }a,b,c;
或者为:
enum { sun,mou,tue,wed,thu,fri,sat }a,b,c;

      如显式赋值: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







  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值