C语言--枚举和联合体

一、联合体

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;
}

当然了,只是这里简单举个栗子,大家可以去尝试其他代码

到这里这一篇就结束了,如有问题欢迎指导!

  • 10
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值