什么是枚举

枚举就是所有可能出现的值的数据集合

定义

  1. enum weekday
  2. {
  3. Mon, Tues, Wed, Thurs, Fri, Sat, Sun
  4. };

像上面那样,当不写对应的值,枚举值默认从0开始,即等同于:

  1. enum weekday
  2. {
  3. Mon = 0,
  4. Tues = 1,
  5. Wed = 2,
  6. Thurs = 3,
  7. Fri = 4,
  8. Sat = 5,
  9. Sun = 6
  10. };

当然,也可以像这样简写:

  1. enum weekday
  2. {
  3. Mon = 0,
  4. Tues,
  5. Wed,
  6. Thurs,
  7. Fri,
  8. Sat,
  9. Sun
  10. };

使用

  1. enum weekday day = Mon;

值只能是枚举类型中的一个,枚举在C语言中可以当一个int类型,enum是枚举型,所占内存空间恒等于4字节(声明不占用内存之前结构体有讲)。C 语言不会对枚举变量的赋值进行限制,C++ 进行了严格的限制。

联合体

使用方法和结构体一模一样,区别在于使用同一块内存,可以使用联合体来判断字节序

  1. int IsBigEndian() {
  2. union {
  3. char c[2];
  4. short s;
  5. } value = {.s = 0x100};
  6. return value.c[0] == 1;
  7. }
  8. int IsBigEndian2() {
  9. short s = 0x100;
  10. char *p = (char*)&s;
  11. return p[0] == 1;
  12. }

返回 1 就是大端序,这是因为字节序不影响不同元素之间的顺序,只影响多字节单元素的字节顺序