目录
?
// 方法一:
enum season{Spring,Summer,Autumn,Winter};
enum season s;
// 方法二:
enum season{Spring,Summer,Autumn,Winter}s;
// 方法三:省略了枚举的类型名-->这样后面就不能使用enum season s这样的形式来定义枚举变量了,因为
// 定义的时候没有名字,enum s;直接这样定义是错误的。
enum {Spring,Summer,Autumn,Winter}s;
代码中使用三种方式定义了一个枚举变量s。?
enum season{Spring,Summer,Autumn,Winter}s;
// 打印枚举类型所占的内存
printf("%d",sizeof(enum season)); // 4个字节
代码中打印了枚举类型所占字节数,会发现它和int类型所占的字节是一样的。?
所以,枚举其实就是一个整数变量,只是将它类型化了,就会有更多的约束--使用起来更加的严格。?
1. 关于枚举中的常量?
enum season{Spring,Summer,Autumn,Winter}s;
0 1 2 3
枚举类型的定义,其实就是一堆常量,这些常量表示特定的含义(和使用宏定义类似),在枚举中的常量,如果没有特殊指定,第一个常量默认从0开始,后面的常量默认比前面的常量值大1.
enum season{Spring,Summer=2,Autumn,Winter=1}s;
也可以像上面一样指定,一些常量的值,?
此时: Spring = 0(默认开始为0) ,?Summer = 2 ,Autumn = 3(默认上一个常量值+1)?,Winter = 1;
?注意: 虽然我们可以指定值给常量,但是注意不可以将两个常量赋值成一样的值。
enum season{Spring,Summer,Autumn,Winter}s;
printf("%d",Spring);
枚举中的常量可以直接在程序中使用 -----> 所以,程序中其它名字不能和枚举类型名相同。??
2. 定义枚举变量?
上面有说过, 但是枚举变量就是一个整型变量,只是它类型化了,有更多的约束。?
enum season{Spring,Summer,Autumn,Winter}s;
s = Spring; // 给枚举变量进行赋值
s = 0; // 赋值
首先,我们建议使用第一种赋值方式。?
当使用第二种的时候,(编译器可能会给出警告),如果我们赋值的值在常量值的范围内,不会有问题,但是如果赋值超出了范围,就会出错(但是,编译器可能不会报错)。 比如: s = 10; // 不对?
使用第一种,不仅可读性高,我们可以明确的直到具体数字代表着什么,而且,直接赋值不会超出范围。?
其实上面说到定义的枚举变量,其值不能超出枚举中的范围(也就是必须等于常量的值)?,这就是约束。 前面说,枚举变量是一个整型变量,但是对于这样的整型变量,我们不能随意赋值一个整数值,只能赋值给它,设置的常量值。
其实枚举,可以看作一个整型,但是它规定了其定义的变量的赋值范围。?