枚举数据类型

时间:2010-11-23 03:49:12

标签: c enums

enum关键字有什么用?我们在哪里可以使用枚举数据类型? 任何人都可以用一个例子来解释吗?

4 个答案:

答案 0 :(得分:6)

enum为数字命名。

enum { MAX_LINES = 60 };

表面上看,#define

也是如此
#define MAX_LINES 60

enum优于#define的好处是名称记录在调试信息中,因此调试器可以使用它。

您还可以使用enum来定义一组相关值:

typedef enum { RED, GREEN, BLUE } Colour;

然后,您可以使用它们为RGB值索引到三元组数组:

typedef unsigned char Pixel[3];

Pixel p;

p[RED]   = 128;
p[GREEN] = 128;
p[BLUE]  = 255;

可能不是世界上最好的例子,但表明可以使用enum的位置。

答案 1 :(得分:0)

枚举在“ANSI C”(或c89)时引入,基本语法为

enum type {
 item1,
 item2,
 item3
};

它取值从0开始,item1将保持0,item2 = 1,item3 = 2 ..直到你告诉编译器它应该从哪个值开始,

enum type {
 item1 = 10,
 item2,
 item3
};

然后值为,item1 = 10,item2 = 11,item = 12 ..此外,编译器会将它们视为整数。

int i=10;
i += item1;

i = i + 10;

您还可以定义枚举类型的变量。

enum type mytype;
mytype = item1;

在这种情况下,变量item1被(静默地)转换为“枚举类型”类型。您可以将“枚举类型”类型的变量与整数混合。

mytype = i;
mytype = mytype + 100;

虽然变量mytype的类型为“枚举类型”,但它也被视为整数,因此它可以包含任何整数变量。 但IMO,枚举应该用作常量,不应该参与算术运算,让编译器决定自身的值而不是赋值。

答案 2 :(得分:0)

枚举是枚举器(ok,trivial),总是作为整数处理,它们用于按顺序放置稍后可以使用的内容,如常用值或索引。但是,正如名字所说,它们被列举,总是提升,如:

enum myenum {
January, February, March, April, May, June, July, August, September, October, November, December
};

然后,如果你有一个数组,请说:

int months[12][30];

您可以使用以下方式致电您的月份:

months[March][...];

另外,如果您声明:

enum myenum {  January = 1, February, March, ..., };

这个程序将从1开始枚举的计数器,依此类推。

最后,关于最后一条规则:您可以根据需要设置初始值,例如10,20,30,42等,但您也可以设置其中一个枚举值,并在默认情况下对其他值进行排序。 / p>

答案 3 :(得分:0)

枚举是一个常量整数值的列表,如

enum boolean { FALSE, TRUE };

枚举中的第一个名称值为0,下一个名称为1,依此类推,除非指定了显式值。如果未指定所有值,则未指定的值将继续从上一个指定值开始:

enum months { JAN = 1, FEB, MAR, APR, MAY, JUN, JUL, AUG, SEP, OCT, NOV, DEC };

由于char在内部使用整数表示,您可以声明指向字符常量的枚举:

enum whitespaces { SPACE = ' ', TAB = ’\t’, NEWLINE = ’\n’, RETURN = ’\r’ };

枚举优于#define的优点是可以为您生成值。此外,调试器可能能够以符号形式打印枚举变量的值。