枚举
-----------------------【列举】
*枚举类型的定义
> //枚举
enum Day
{
Mon, //0
Tues, //1
Wed, //2
Thur, //3
Fri, //4
Sat, //5
Sun //6
};
//enum Day是枚举类型,{ }里面的内容是枚举类型可能的取值,叫做 枚举常量
//枚举常量默认值是从0开始,一次递增1;在定义的时候也可以赋初值
//eg:在定义的时候赋初值,后面会依次递增1
enum colour
{
Red, //0
Orange, //1
Yellow = 5, //5
Green, //6
Blue, //7
};
int main()
{
printf("enum Day:\n");
printf("%d\n", Mon); //0
printf("%d\n", Tues); //1
printf("%d\n", Wed); //2
printf("%d\n", Thur); //3
printf("%d\n", Fri); //4
printf("%d\n", Sat); //5
printf("%d\n", Sun); //6
printf("enum colour:\n");
printf("%d\n", Red); //0
printf("%d\n", Orange); //1
printf("%d\n", Yellow); //5
printf("%d\n", Green); //6
printf("%d\n", Blue); //7
system("pause");
return 0;
}
【为什么要使用枚举?】
枚举的优点:
1.增加代码的可读性和可维护性
2.和#define定义的标识符比较枚举有类型检查,更加严谨
3.防止命名污染(封装)
4.便于调试
5.使用方便,一次可以定义多个常量
联合(共用体)
***联合类型的定义:联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员共用同一块空间(所以,联合叫做共用体)
联合体类型的定义:
联合体的特点:联合的成员是共用同一块内存空间的。一个联合变量的大小至少是最大成员的大小。
union Un
{
int i;
char c;
};
//内部成员中的最大成员的大小是:int-----4个字节
//内部成员的最大对齐数是:int------4
//4%4==0
//联合体的大小是:4
union Un un;
int main()
{
printf("%d\n", &(un.i)); //3572052
printf("%d\n", &(un.c)); //3572052
//联合体内部的所有元素共用同一块内存,并且都是从低地址开始开辟
un.i = 0x11223344;
un.c = 0x55;
printf("%x\n", un.i); //11223355
system("pause"); //所以,计算机存储方式是按照小端方式存储的
return 0;
}
上面代码的图解:
1.计算机按照小端方式存储
2.计算机按照大端方式存储
联合大小的计算
1.联合的大小至少是最大成员的大小
2.当成员大小不是最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍
(联合体要内存对齐,联合体最终大小时:整除内部成员最大的对齐数)
//联合体大小计算:
union Un1
{
char c[5]; //最大对齐数:1 大小:5
int i; //最大对齐数:4 大小:4
};
//最大成员的大小:5
//5+3才能满足可以整除最大对齐数4
//所以,联合体的总大小是:8
union Un2
{
short c[7]; //最大对齐数:2 大小:14
int i; //最大对齐数:4 大小:4
};
//最大成员的大小:14
//14+2才能满足可以整除最大对齐数4
//所以,联合体的总大小是:16
int main()
{
printf("%d\n", sizeof(union Un1)); //8
printf("%d\n", sizeof(union Un2)); //16
system("pause");
return 0;
}
大小端
大小端模式的介绍:
大端存储模式:一个数据的低位字节序的内容放在高地址处,高位字节序存的内容放在低地址处。(大小大:高地址、低位、大端)
小端存储模式:一个数据的低位字节序的内容放在低地址处,高位字节序存的内容放在高地址处(小小小:低位、低地址、小端)