枚举和联合

枚举就是把有限的可能一一列举。

比如一周的七天,一年的12个月等等。

联合是不同的成员变量共用同一块内存,但存在内存对齐。

  • 枚举的定义

关键字:enum

enum typename

{

        枚举常量,

};

例如:

enum Day//星期
{
    Mon,
    Tues,
    Wed,
    Thur,
    Fri,
    Sat,
    Sun
};

在C中,enum Day就是自定义的一个枚举类型,在C++中,可以省去enum。

里面的Mon, Tues...就是枚举常量

枚举常量的值默认从0开始依次增加1,比如Mon是0,Tues是1...

也可以自定义初始值,若自定义了初始值,则后面的枚举常量默认按照定义的值依次加1作为初始值。

  • 枚举的优点

1. 增加代码可读性和可维护性

可以为枚举常量取有意义的名字,做到望码知义。

2. 和#define相比有类型检查,更加严谨。

#define定义的宏和符号常量是没有类型的,编译器无法对其进行类型检查,但是枚举常量是有类型的,虽然在C中可以用整型替换,但在C++中被严格限制。

3. 防止命名污染

4.便于调试

#define定义的宏和符号常量会在预处理阶段被全部替换,在链接好的可执行程序中是没有这些符号的,所以不能调试;而枚举常量是保存在只读代码区,可以看到相关调试信息。

5. 使用方便,可以一次定义多个枚举常量。

  • 枚举的使用

和结构体类似,可以使用已定义好的枚举类型定义枚举变量,枚举变量的取值应该是枚举类型定义中的枚举变量。

  • 联合的定义

联合也是一种特殊的自定义类型,特点是成员共用一块内存空间,所以也叫共用体。

  • 联合的特点

联合的大小至少是最大成员变量的大小,每个时刻只能有一个成员变量起作用。

利用联合体共用内存的特点,可以判断机器的大小端。

#include <stdio.h>
int SysCheck()
{
	union u
	{
		int i;
		char c;
	};
	union u test;
	test.i = 1;
	return test.c;
}
int main()
{
	int ret = SysCheck();
	if (ret == 1)
	{
		printf("小端\n");
	}
	else
	{
		printf("大端\n");
	}
	return 0;
}
  • 联合大小的计算

联合体的大小是能容纳最大成员变量,和成员变量最大对齐数的整数倍,取大者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值