为什么我们在 C 中需要枚举数据类型,尽管它比通过一个变量字符串实现它使用更多的内存。
例如,如果我们将枚举设置为:`enum month {janueary, february, march, april, may, june, july, august, september, november, december};
enum moth aMonth;
aMonth = "janueary"
aMonth = "february"
该枚举在内存中分配 12*4 字节。如果我们用一根绳子来容纳这12个 元素它会更高效,因为我们节省了更多内存。在这种情况下代码 将如下:
char *aMonth;
aMonth = "janueary"
aMonth = "february"
and so on.
如果枚举是例如
enum month{januearyyyy,february};
即字符串字符分配两个以上的整数分配我们可以使用
#define
例如:
#define janueary 0
等等。甚至没有分配任何变量。
只为一个常量值保留 4 个字节是毫无意义的!
有些书说枚举的想法是,您可以在枚举变量中仅存储枚举的元素,而不能存储其他值。但大多数编译器允许您将标识符用作普通整型变量并使用其他值。
那么,使用枚举数据类型有什么好处?
最佳答案
枚举的主要目的是提供变量意图的 self 记录。当你写:
enum month aMonth;
很明显,aMonth
的值只能来自枚举中声明的常量集。如果您使用宏,则需要声明它:
int aMonth;
没有任何东西可以告诉您哪些值合适或不合适。
正如您所注意到的,当您分配给变量时,C 不会阻止您使用枚举类型之外的值,但编译器仍然可能会发出警告。如果没有类型声明,编译器就无法知道要警告什么。
声明枚举不会保留任何内存。内存仅分配给变量,而不分配给结构和枚举的声明。并且枚举的大小不会乘以元素的数量 - sizeof(enum Month)
不是 12*4
。编译器可以使用任何足够大以容纳所有值的整数类型;对于enum Month
,它可以使用unsigned char
,因此它只有1个字节(但我认为大多数编译器默认使用int
作为枚举,所以它们将是 4 个字节)。
关于c - 为什么我们在 C 中需要枚举数据类型,尽管它比通过一个变量字符串甚至 #define 实现它使用更多的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37224639/