从名字来看,枚举的意思就是列举,把可能的取值列举出来.
    
    从我们的日常生活中来看,有很多例子:
    
    1.一周的星期一到星期日是固定的7天,就可以列举出来.
    
    2.从性别来看,有男,女两种.
    
    3.月份也类似于一周,有固定的十二个月,也可以列举出来.
    
    类似于这样的例子有很多,碰到这样的情况,我们就可以使用枚举了.
    
    枚举类型的定义
    
    先来看几个例子:
   
enum Day{	//星期
	Monday,
	Tuesday,
	Wednesday,
	Thursday,
	Friday,
	Saturday,
	Sunday
};
enum Sex{	//性别
	Male,
	Female
};
enum Color{	//颜色
	Red,
	Yellow,
	Blue
};
    在上面我们定义的enum Day, enum Sex, enum Color都是枚举类型.
    
    在{}中的内容是枚举类型的可能取值,也叫作枚举常量.
    
    枚举常量的取值默认从0开始,依次递增1,当然我们可以在定义的时候给枚举常量赋初值.比如:
   
enum Color{	//颜色
	Red = 1,
	Yellow = 2,
	Blue = 4
};
    枚举的优点:
    
    1.枚举能够增加代码的可读性和可维护性
    
    2.枚举由类型检查,更加严谨
    
    3.便于调试
    
    4.使用方便,可以一次定义多个常量
   
枚举的使用
enum Color{	//颜色
	Red = 1,
	Yellow = 2,
	Blue = 4
};
enum Color clr = Blue;	//只能拿枚举常量给枚举变量赋值
int main(){
	printf("%d\n", clr);
	system("pause");
	return 0;
}
不能像下面这样使用
enum Color{	//颜色
	Red = 1,
	Yellow = 2,
	Blue = 4
};
enum Color clr = Blue;
clr = 5;
int main(){
	printf("%d\n", clr);
	system("pause");
	return 0;
}
    这样就会报错,提示重定义,多次初始化
    
    
    
    关于联合类型的定义
    
    联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,而他们的特征就是这些成员会共用同一块空间(所以联合也叫共用体),比如:
   
#include <stdio.h>
#include <stdlib.h>
//联合类型的声明
union Un{
	char c;
	int i;
};
//联合变量的定义
union Un un;
int main(){
	//计算联合变量的大小
	printf("%d\n", sizeof(un));
	system("pause");
	return 0;
}
联合体的成员是共同运用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(联合体至少得有能力保存最大的那个成员)
#include <stdio.h>
#include <stdlib.h>
union Un{
	int i;
	char c;
};
union Un un;
int main(){
	printf("%d\n", &(un.i));
	printf("%d\n", &(un.c));
	system("pause");
	return 0;
}
    思考一下,下面的输出结果一样吗?
    
    printf(“%d\n”, &(un.i));
    
    printf(“%d\n”, &(un.c));
   
    
    
    联合体共用同一块空间,所以输出结果一样.
   
    关于联合体大小的计算
    
    1.联合体的大小至少是最大成员的大小.
    
    2.当最大成员大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍.
   
比如:
#include <stdio.h>
#include <stdlib.h>
//关于联合体大小的计算
union Un1{
	char c[5];
	int i;
};
union Un2{
	short c[7];
	int i;
};
int main(){
	printf("%d\n", sizeof(union Un1));
	printf("%d\n", sizeof(union Un2));
	system("pause");
	return 0;
}
    
    
    首先它们的最大对齐数都是4,Un1的最大成员大小为5,不是4的整数倍,所以对齐到8字节.Un2的最大成员大小为14(short类型为2字节),不是4的整数倍,所以对齐到16字节.
   
 
