【C】枚举,以及枚举和结构体的不同

枚举实际意义跟汉语意义没有多少相似的地方,而且容易让人想起穷举。

学完枚举基本就把几个基本的数据类型学完了哈

计蒜客有点小,听说网易公开课不错?

穷举……呸,枚举和结构体的结构类似

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语言中所起到的作用也并不在结构体变量上,而是结构体变量的内部成员,结构变量只是起标示符的作用。

   枚举起到的作用主要是枚举常量,但变量也依然可以当一个普通的变量使用。

 

你可能感兴趣的:(【C】枚举,以及枚举和结构体的不同)