枚举 联合体

时间:2021-03-23 18:53:55

一.枚举

1.枚举是一个类型 一个常量数组

2.关键字:enum

1 enum Week{MON,TUE,WED,THU,FRI,SAT,SUN};

3.声明一个enum Week w 那么sizeof(w)的大小是4

w可以等于以上七个里面中的任意一个 只能在范围之内赋值

默认情况下 不赋值第一个从0开始 MON=0 TUE=1 以此类推

但例如对THU进行赋值 让THU=100 那么FRI就是101

之所以大小是4 因为它就是一个int类型的变量

4.作用:方便代码的阅读

枚举可以用宏来代替 也可以说 枚举也是声明常量的一种方式

 1 #include<stdio.h>
 2 
 3 enum Week {MON,TUE,WED,THU,FRI,SAT,SUN};
 4 enum CaiQuan {JIANDAO,SHITOU = 100,BU};
 5 
 6 int main()
 7 {
 8     enum CaiQuan cq = BU;
 9 
10     switch(cq)
11     {
12     case JIANDAO:
13         printf("%d\n",JIANDAO);
14         break;
15     case SHITOU:
16         printf("%d\n",SHITOU);
17         break;
18     case BU:
19         printf("%d\n",BU);
20         break;
21     }
22 
23     return 0;
24 }

二.联合体

联合体的所有成员共享一块内存 联合体的大小看最大的成员有多大

 1 #include<stdio.h>
 2 
 3 typedef union MyUnion
 4 {
 5     int a;
 6     short b;
 7     char c;
 8     int d;
 9 }MU;
10 
11 int main()
12 {
13     MU mu;
14     int n;
15 
16     n = sizeof(mu);
17 
18     /*mu.a = 10;
19     printf("%d\n",mu.b);
20 
21     mu.c = 100;
22     printf("%d\n",mu.a);*/
23 
24     mu.c = 1;
25     printf("%d\n",mu.a);
26 
27     return 0;
28 }

说明:这段代码输出的时候 是乱码的

因为c是char 只有一个字节 但是a是int类型的 有四个字节

但如果把下面两行注掉 上面注掉的四行放开的话 就可以正常输出 因为a已经被赋过值了