enum的使用

一直都不是很熟悉enum的使用方法,今天小test了一下:

#include <stdio.h>

int main()
{
	enum INT{a=1,b=2,c=3};

	enum INT my=b;
	printf("%d\n",my);

	return 0;
}

转一篇不错的文章:

enum 在c中的使用

如果一个变量你需要几种可能存在的值,那么就可以被定义成为枚举类型。之所以叫枚举就是说将变量或者叫对象可能存在的情况也可以说是可能的值一一例举出来。 

  举个例子来说明一吧,为了让大家更明白一点,比如一个铅笔盒中有一支笔,但在没有打开之前你并不知道它是什么笔,可能是铅笔也可能是钢笔,这里有两种可能,那么你就可以定义一个枚举类型来表示它!

enum box{pencil,pen};//这里你就定义了一个枚举类型的变量叫box,这个枚举变量内含有两个元素也称枚举元素在这里是pencil和pen,分别表示铅笔和钢笔。

  这里要说一下,如果你想定义两个具有同样特性枚举类型的变量那么你可以用如下的两种方式进行定义!

enum box{pencil,pen};  
  
enum box box2;//或者简写成box box2;

  再有一种就是在声明的时候同时定义。

enum {pencil,pen}box,box2; //在声明的同时进行定义!

  枚举变量中的枚举元素系统是按照常量来处理的,故叫枚举常量,他们是不能进行普通的算术赋值的,(pencil=1;)这样的写发是错误的,但是你可以在声明的时候进行赋值操作!

enum box{pencil=1,pen=2};

   但是这里要特别注意的一点是,如果你不进行元素赋值操作那么元素将会被系统自动从0开始自动递增的进行赋值操作,说到自动赋值,如果你只定义了第一个那么系统将对下一个元素进行前一个元素的值加1操作,例如

enum box{pencil=3,pen};//这里pen就是4系统将自动进行pen=4的定义赋值操作!

  前面说了那么多,下面给出一个完整的例子大家可以通过以下的代码的学习进行更完整的学习!

#include <iostream>  
using namespace std;  
  
void main(void)  
{  
    enum egg {a,b,c};  
    enum egg test; //在这里你可以简写成egg test; 
  
     test = c; //对枚举变量test进行赋予元素操作,这里之所以叫赋元素操作不叫赋值操作就是为了让大家明白枚举变量是不能直接赋予算数值的,例如(test=1;)这样的操作都是不被编译器所接受的,正确的方式是先进行强制类型转换例如(test = (enum
egg) 0;)! 
  
    if (test==c)  
     {  
        cout <<"枚举变量判断:test枚举对应的枚举元素是c" << endl;  
     }  
  
    if (test==2)  
     {  
        cout <<"枚举变量判断:test枚举元素的值是2" << endl;  
     }  
  
    cout << a << "|" << b << "|" << test <<endl;  
  
     test = (enum egg) 0; //强制类型转换 
    cout << "枚举变量test值改变为:" << test <<endl;  
    cin.get();  
}

  看到这里要最后说一个问题,就是枚举变量中的枚举元素(或者叫枚举常量)在特殊情况下是会被自动提升为算术类型的!

#include <iostream>  
using namespace std;  
  
void main(void)  
{  
    enum test {a,b};  
    int c=1+b; //自动提升为算术类型 
    cout << c <<endl;  
    cin.get();  
}

 

 

 

枚举类型 
在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量 说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。在“枚举”类型的定义中列举出所有可能的取值,被说明为该“枚 举”类型的变量取值不能超过定义的范围。应该说明的是,枚举类型是一种基本数据类型,而不是一种构造类型,因为它不能再分解为任何基本类型。 
11.10.1 枚举类型的定义和枚举变量的说明 
1. 枚举的定义枚举类型定义的一般形式为: 
enum 枚举名{ 枚举值表 }; 
在枚举值表中应罗列出所有可用值。这些值也称为枚举元素。 
例如: 

该枚举名为weekday,枚举值共有7个,即一周中的七天。凡被说明为weekday类型变量的取值只能是七天中的某一天。 
2. 枚举变量的说明 
如同结构和联合一样,枚举变量也可用不同的方式说明,即先定义后说明,同时定义说明或直接说明。 
设有变量a,b,c被说明为上述的weekday,可采用下述任一种方式: 
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; 
11.10.2 枚举类型变量的赋值和使用 
枚举类型在使用中有以下规定: 
1. 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。 
例如对枚举weekday的元素再作以下赋值: 
sun=5; 
mon=2; 
sun=mon; 
都是错误的。 
2. 枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。如在weekday中,sun值为0,mon值为1,…,sat值为6。 
【例11.10】 
main(){ 
enum weekday 
{ sun,mon,tue,wed,thu,fri,sat } a,b,c; 
a=sun; 
b=mon; 
c=tue; 
printf("%d,%d,%d",a,b,c); 

说明: 
只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。如: 
a=sum; 
b=mon; 
是正确的。而: 
a=0; 
b=1; 
是错误的。如一定要把数值赋予枚举变量,则必须用强制类型转换。 
如: 
a=(enum weekday)2; 
其意义是将顺序号为2的枚举元素赋予枚举变量a,相当于: 
a=tue; 
还应该说明的是枚举元素不是字符常量也不是字符串常量,使用时不要加单、双引号。 
【例11.11】 
main(){ 
enum body 
{ a,b,c,d } month[31],j; 
int i; 
j=a; 
for(i=1;i<=30;i++){ 
month[i]=j; 
j++; 
if (j>d) j=a; 

for(i=1;i<=30;i++){ 
switch(month[i]) 

case a:printf(" %2d %c/t",i,'a'); break; 
case b:printf(" %2d %c/t",i,'b'); break; 
case c:printf(" %2d %c/t",i,'c'); break; 
case d:printf(" %2d %c/t",i,'d'); break; 
default:break; 


printf("/n"); 
}

时间: 2024-10-26 15:22:29

enum的使用的相关文章

Video for Linux Two API Specification revision0.24【转】

转自:http://blog.csdn.net/jmq_0000/article/details/7536805#t136 Video for Linux Two API Specification Revision 0.24 Michael H Schimek             <mschimek@gmx.at>            Bill Dirks Hans Verkuil Martin Rubli Copyright 1999, 2000, 2001, 2002, 2003,

C#中已知enum值如何取出enum

enum TypeName { SystemString, SystemInt16, SystemInt32 }     现在有string typeName 里面存放 TypeName的枚举值,比如"SystemString" 现在要取出TypeName.SystemString: 使用Enum类的反射:   (TypeName)typevalue = (TypeName)Enum.Parse(typeof(TypeName), typeName, true); 为了事先验证type

Jsdk5.0中新增枚举enum类型使用例解

js 作者:Junsan Jin 日期:2005-03-25 邮箱:junsan21@126.com ; junnef21@sohu.com Jsdk5.0中新增了很多的特性,如泛型.增强的循环.改进的装.拆箱.静态引入等,大大增强了java语言的易用性. 我现在正在做一个从com+(dcom)平台到j2ee平台移植的项目,中间有很多枚举类型的定义,以前做起来要引入第三方类库,或者自己写类库,或者干脆定义成静态变量使用,很不方便,而且可能会产生很多问题.Jsdk5.0的发布正好解决了这些问题.

再谈java枚举 ENUM

没有枚举之前: 在没有枚举之前,我们想列举一些相关的常量,我们会采用如下的方式: 1 2 3 4 interface ActionInterface {     public static final int RIGHT = 0;     public static final int LEFT = 1; } 然后在某个类似于下面的方法中,使用这些常量: 1 2 3 4 5 6 7 8 9 10 11 12 public void playWithInterface(int num) {    

C/C++中一个简单的enum手法(idiom)

今天写程序的时候,又用到这个idiom了,于是顺便贴出来.这个idiom蛮简单的,估计很 多人都用过.今天主要是贴出来给新手参考(老手们就甭费时看此帖了). 为了说明这个手法具体该咋用,咱举一个简单的例子来说事儿.比方说要开发一个网络程 序,其中需要统计各种网络协议的数据包数量. ★版本1 假设一开始只需要处理HTTP和FTP两种协议.有些同学不假思索,立即会声明如下两个整 数用于统计: int nCntHttp = 0; int nCntFtp = 0; 猛一看,似乎没啥问题.但是,如果需求发

Scalaz(4)- typeclass:标准类型-Equal,Order,Show,Enum

  Scalaz是由一堆的typeclass组成.每一个typeclass具备自己特殊的功能.用户可以通过随意多态(ad-hoc polymorphism)把这些功能施用在自己定义的类型上.scala这个编程语言借鉴了纯函数编程语言Haskell的许多概念.typeclass这个名字就是从Haskell里引用过来的.只不过在Haskell里用的名称是type class两个分开的字.因为scala是个OOP和FP多范畴语言,为了避免与OOP里的type和class发生混扰,所以就用了typecl

C# Enum设计和使用的相关技巧

技巧|设计 Enum的运算通常涉及到位运算(AND.OR.XOR),按位运算, 常使用FlagsAttribute 自定义属性定义.FlagsAttribute 和 Enum 的准则:只有要对数值执行按位运算(AND.OR.XOR)时才对枚举使用 FlagsAttribute 自定义属性. 用 2 的幂(即 1.2.4.8 等)定义枚举常量.这意味着组合的枚举常量中的各个标志都不重叠. 请考虑为常用标志组合创建一个枚举常量.例如,如果用于文件 I/O 操作的枚举包含枚举常量 Read = 1 和

C# Idioms: Enum还是Enum Class(枚举类)

C# Idioms:Enum还是Enum Class(枚举类) marshine (原文排版格式:http://www.marshine.com) reversion:2004/5/28修改说明:感谢Ninputer提到的CLS兼容问题,同时修改了原来版本没有提及的Equals改写,以及修改"=="重载的不完善代码,和增加enum struct内容 reversion:2004/6/4 增加kirc提到的Enum的Flags特性,因为文本超长,新的版本可以在http://www.mar

Java 语言中 Enum 类型的使用介绍

Enum 类型的介绍 枚举类型(Enumerated Type) 很早就出现在编程语言中,它被用来将一组类似 的值包含到一种类型当中.而这种枚举类型的名称则会被定义成独一无二的类型描述符,在这一点上和常量的 定义相似.不过相比较常量类型,枚举类型可以为申明的变量提供更大的取值范围. 举个例子来说明 一下,如果希望为彩虹描绘出七种颜色,你可以在 Java 程序中通过常量定义方式来实现. 清单 1. 常量定义 Public static class RainbowColor { // 红橙黄绿青蓝紫

用NHibernate持久化enum和bool类型

开篇 用NHibernate持久化类的enum和bool类型的属性的时候,我们需要持久化的更通用一些,数据库无关一些. 枚举持久化为对应整数的字符串,NH默认持久化为整数. 布尔的持久化默认根据数据库的类型而不同,sqlserver会持久化为bit,可是很多数据库没有bit类型,通常用char来持久化. 可以选择持久化为Y和N,也可以选择持久化为1和0. 1.枚举enum的持久化 将枚举持久化成一个字符串,也就是将枚举对应的整数持久化到数据库. public enum Status { Yes