枚举实际意义跟汉语意义没有多少相似的地方,而且容易让人想起穷举。
学完枚举基本就把几个基本的数据类型学完了哈
计蒜客有点小,听说网易公开课不错?
穷举……呸,枚举和结构体的结构类似
struct stuent { int age; float height; };
enum{ FIR, SCD, THD };
但不同点很多,如下
- 定义结构体是定义一个数据类型,之后,声明的是结构体变量,结构体变量本身只能被赋值于另一个结构体变量,而且两个结构变量必须是同一种结构,但结构变量之内的变量是可以被赋值的。
而且结构体变量声明所用的标示符并不会占用变量的标示符的空间,但会和共用体,枚举,结构体占用一个空间。
struct student amy; int amy =3; printf("amy' age is %d\n,amy is %d\n ",amy.age, amy);
这是可行的
枚举也是定义一个数据类型,但声明的枚举变量就和结构变量没有多少相似点了。枚举变量是一个普通的整形变量,可以被赋值
枚举变量声明所用的标示符会占用变量的标示符的空间。可能是作用域不同的话会覆盖,作用域相同会冲突吧(通常这时,code block会给我一个error)。
经过code block运行发现,GCC的编译器中枚举的性质和和百度所写的不一样,而计蒜客中所强调的注意事项是胡勒一气
计蒜客说类似enum month m = 2这样的语句是错误的,而百度说只能把枚举值赋予枚举变量,a=(enum weekday)2;其意义是将顺序号为2的枚举元素赋予枚举变量a
我有一种遇到了谭浩强的感觉……
CPP中所说的枚举似乎和GCC保持一致(p407—p410),CPL中枚举出现在可怜的附录A.8.4,(P191),而且十分晦涩,并没有提到枚举变量,matrix67的博客没有提到枚举
1 #include <stdio.h> 2 enum fuck { 3 FIR=7, SCD=6, THD//不同枚举常量的值可以相同 4 }a=SCD; 5 6 int main() { 7 printf("Output the elements in this enum\n"); 8 enum fuck b=2;//枚举变量实际上只是一个普通的int类型变量 9 a=b; //可以对枚举变量随意赋值 10 ++b; 11 b++;//在C++中不能对枚举变量用++运算符,但C可以 12 enum fuck c=(enum fuck)3; 13 enum fuck d =1;//这两种赋值都可以,类型转换是多余的 14 printf("FIR=%d, \nSCD=%d, \n THD=%d\n %d\n %d\n %d\n %d\n", FIR, SCD, THD,a,b,c,d); 15 return 0; 16 }
- 枚举的成员只能是整形变量,所以不用声明成员的数据类型
但结构体需要声明,因为结构体的成员可以是变量,数组,指针,结构体,枚举变量,共用体,似乎不能有常量。
- 枚举,结构体都是定义数据类型,但结构体定义后并不会起实际作用,只有在声明结构体变量后才有作用。
枚举定义后其常数所用的标示符会占用变量的标示符的空间。就算没有定义枚举变量,也可以把其成员拿出当来常量使用。
- 结构体在C语言中所起到的作用也并不在结构体变量上,而是结构体变量的内部成员,结构变量只是起标示符的作用。
枚举起到的作用主要是枚举常量,但变量也依然可以当一个普通的变量使用。