枚举类型的定义形式为:
可以看到,我们仅仅给出了名字,却没有给出名字对应的值,这是因为枚举值默认从 0 开始,往后逐个加 1(递增);也就是说,week 中的 Mon、Tues ...... Sun 对应的值分别为 0、1 ...... 6。
更为简单的方法是只给第一个名字指定值:
Mon、Tues、Wed 这些名字都被替换成了对应的数字。这意味着,Mon、Tues、Wed 等都不是变量,它们不占用数据区(常量区、全局数据区、栈区和堆区)的内存,而是直接被编译到命令里面,放到代码区,所以不能用
成员列表
};
enum typeName{ valueName1, valueName2, valueName3, ...... };
注意最后的;
不能少。
列出一个星期有几天:
- enum week{ Mon, Tues, Wed, Thurs, Fri, Sat, Sun };
我们也可以给每个名字都指定一个值:
- enum week{ Mon = 1, Tues = 2, Wed = 3, Thurs = 4, Fri = 5, Sat = 6, Sun = 7 };
- enum week{ Mon = 1, Tues, Wed, Thurs, Fri, Sat
- , Sun };
&
取得它们的地址。这就是枚举的本质。
-------------------------------------------华丽的分割线---------------------------------------------------
C语言共用体(Union)
union 共用体名{成员列表
};
结构体和共用体的区别在于:结构体的各个成员会占用不同的内存,互相之间没有影响;而共用体的所有成员占用同一段内存,修改一个成员会影响其余所有成员。共用体有时也被称为联合或者联合体,这也是 Union 这个单词的本意。
结构体占用的内存大于等于所有成员占用的内存的总和(成员之间可能会存在缝隙),共用体占用的内存等于最长的成员占用的内存。共用体使用了内存覆盖技术,同一时刻只能保存一个成员的值,如果对新的成员赋值,就会把原来成员的值覆盖掉。
设计一个包含共用体的结构体:
- struct{
- char name[20];
- int num;
- char sex;
- char profession;
- union{
- float score;
- char course[20];
- } sc;
- } bodys[TOTAL];