一、联合体
1.联合体的声明
联合体:关键字union
像结构体⼀样,联合体也是由⼀个或者多个成员构成,这些成员可以不同的类型
但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所 以联合体也叫:共⽤体
举个栗子:
2.联合体的特点
联合的成员是共⽤同⼀块内存空间的,这样⼀个联合变量的⼤⼩,⾄少是最⼤成员的⼤⼩(因为联合 ⾄少得有能⼒保存最⼤的那个成员)
举个栗子:请看下面这个代码,输出的三个地址⼀模⼀样,证明了它们都是使用同一块空间的
注意:他们公用一块空间,意味着它们不能同时存在啊,或者说它们不能同时使用
3.联合体大小的计算
1.一个联合体的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)
2.当最⼤成员⼤⼩不是最⼤对⻬数的整数倍的时候,就要对⻬到最⼤对⻬数的整数倍
举个栗子:
既满足short,又满足int,所以就是16了
4.练习
联合体中成员不能同时存在,所以只适合在某一时间只使用其中单个成员时使用写⼀个程序,比如当判断当前机器是⼤端?还是⼩端?
二、枚举
关键字:enum
1.什么是枚举
枚举顾名思义就是⼀⼀列举,把可能的取值⼀⼀列举。
枚举与结构体的定义类似
举个栗子:
这些可能取值都是有值的,默认从0开始,依次递增1
当然了,在声明枚举类型的时候也可以赋初值
2.枚举类型的优点
1.增加代码的可读性和可维护性
2. 和#define定义的标识符⽐较枚举有类型检查,更加严谨。
3. 便于调试,预处理阶段会删除 #define 定义的符号
4. 使⽤⽅便,⼀次可以定义多个常量
5. 枚举常量是遵循作⽤域规则的,枚举声明在函数内,只能在函数内使⽤
3.枚举应用举例
下面简单举个栗子来看看枚举的优点:
void menu()
{
printf("**************************\n");
printf("******* 1.add 2.sub******\n");
printf("******* 3.mul 4.div******\n");
printf("******* 0.exit ********\n");
printf("**************************\n");
}
int main()
{
int input = 0;
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case 1: //这里的1234不容易使人联想的+-*/,
break; //必须要看着上面的菜单才知道是什么
case 2:
break;
case 3:
break;
case 4:
break;
case 0:
break;
default:
break;
}
return 0;
}
所以我们可以使用枚举,
enum Option //这里我们创建一个菜单
{
EXIT, //0
ADD, //1
SUB, //2
MUL, //3
DIV //4
};
int main()
{
int input = 0;
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case ADD: //这里改成相应的名字,就很清楚明了
break;
case SUB:
break;
case MUL:
break;
case DIV:
break;
case EXIT:
break;
default:
break;
}
return 0;
}
当然了,只是这里简单举个栗子,大家可以去尝试其他代码
到这里这一篇就结束了,如有问题欢迎指导!