枚举--列举
把可能的取值一一列举。
例如:
一周的周一到周天是有限的7天,可以一一列举。
性别有男,女,保密也可以一一列举。
枚举的定义:
//enum Day
//{//枚举常量,由逗号隔开
// Mon,//0
// Tues,//1
// Web,//2
// Thur,//3
// Fri,//4
// Sat,//5
// Sun//6
//};
enum Day
{//枚举常量,由逗号隔开
Mon=1,
Tues,
Web,
Thur,
Fri,
Sat,
Sun
};//一个类型,还没有存值,不占空间,只有申请变量才申请空间
int main() {
//enum Day d = Fri;//表示星期五
printf("%d\n", Mon);
printf("%d\n", Tues);
printf("%d\n", Web);
printf("%d\n", Thur);
printf("%d\n", Fri);
printf("%d\n", Sat);
printf("%d\n", Sun);
return 0;
}
枚举的优点:
枚举本身就是个类型;
枚举的使用:
enum color
{
RED=1,
GREEN=2,
BLUE=4
};
enum color clr=GREEN;//只能拿枚举常量给枚举赋值,才不会出现类型的差异。
clr=5;//0k??
联合(共用体):
定义:联合也是一种特殊的自定义类型,特征是这些成员公用同一块空间(所以联合也叫公用体)。
union 用你的不用我的。
联合体的特点:
联合的成员是共用同一块空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。
面试题:
判断当前计算机的大小端存储:
int check_sys()
{
int a = 1;
return *(char*)&a;
}
int mian()
{
int a = 1;//0x 00 00 00 01
//低---->高
//01 00 00 00--小端
//00 00 00 01--大端
int ret = check_sys();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
int check_sys()
{
union Un
{
char c;
int i;
}u;
u.i = 1;
return u.c;
}
int main()
{
int a = 1;//0x 00 00 00 01
//低---->高
//01 00 00 00--小端
//00 00 00 01--大端
int ret = check_sys();
if (ret == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
联合大小的计算;
- 联合的大小至少是最大成员的大小;
- 当最大成员大小不是最大对齐数的整数倍的时候,就对齐到最大对齐数的整数倍。