枚举
顾名思义,枚举为一一列举。
枚举是一种类型,可以通过类型创建变量
枚举的定义:
语法:
默认值:
enum 枚举名{
枚举可能取值1,
枚举可能取值2,
……
}
enum color{
RED,//0
GREEN,//1
BLUE//2
};
int main(){
printf("%d %d %d\n"),RED,GREEN,BLUE);//0 1 2
return 0;
}
枚举成员的值默认从0开始
也可以自定义枚举可能取值的值:
enum 枚举名{
枚举可能取值1=初始值(常量),
枚举可能取值2=初始值(常量),
……
}
可以定义一部分初始值,一部分默认值,默认值从零开始,如果前一个可能取值定义了初始值,则是初始值+1。
enum color{
RED,//0
GREEN=9,//9
BLUE//10
};
int main(){
printf("%d %d %d\n"),RED,GREEN,BLUE);//0 9 10
return 0;
}
枚举的使用:
enum color c=GREEN;
枚举的大小:
整形大小
printf("%d",sizeof(c));//4
枚举的优点:
1.可读性++
2.枚举有类型检查,更加严谨。
3.防止命名污染(命名冲突)。
4.便于调试。
5.使用方便,可一次定义多个常量
联合(共用体)
一种特殊的自定义类型。
特征:成员变量共用同一块空间。一个联合变量的空间至少是最大成员的大小。
在同一时刻只能使用联合体中的一个成员,因为一个成员被修改另外的成员也会被修改。
语法:
union 联合体名{
类型 成员变量名 1;
类型 成员变量名 2;
}
union un{
int i;
char c;
}
//声明一个枚举变量
union un a;
联合体的大小:
联合体的大小至少是最大成员的大小;
联合体大小不是最大对齐数整数倍的时候,就要对齐到最大对齐数的整数倍。
联合体的应用举例:
判断当前机器是大端存储还是小端存储。
大端字节序存储模式:低位数据存在高位地址
小端字节序存储模式:低位数据存在低位地址
不使用联合体的求解方式:
int main(){
int a=1;
if(1==*(char*)&a){
printf("小端\n");
}else{
printf("大端\n");
}
return 0;
}
使用联合体:
union u{
char c;
int i;
}
int main(){
union u un;
u.i=1;
if(1==u.c){
printf("小端\n");
}else{
printf("大端\n");
}
return 0;
}