Note231007枚举、联合体

一、枚举

1.枚举类型的定义

enum Tag//枚举类型的声明
{
	Mon,//枚举常量
	Tues,//与结构声明类似,但是用逗号隔开枚举常量
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};//与结构声明相同,使用分号结束

声明之后,枚举常量的值默认为0,1,2,3,4……一个自然数数列。

如果想修改枚举常量的值,可以:

enum Tag
{
	Mon=1,
	Tues,
	Wed,
	Thur,
	Fri,
	Sat,
	Sun
};

声明Mon的值为1,Tues的值为2,Wed的值为3……是一个自然数数列的子数列。

2.创建枚举类型变量

enum Day d = Fri;

Fri就是枚举类型常量,可以将这个值赋给枚举类型enum Day的变量d

由于c的语法检查不严格,将int类型的5直接赋给d时,编译器不报错。

但在c++编译中会报语法错误。

3.枚举的优点

 #define的预处理是直接将对应符号替换成一个值,会破坏代码在调试过程中的可视性

二、联合(共用体)

1.定义

包含一系列的成员,特征是这些成员共用同一块空间

#include <stdio.h>

union Un {
	int a;
	char c;
};

int main() {
	union Un u;
	printf("%d\n", sizeof(u));

	printf("%p\n", &u);
	printf("%p\n", &u.a);
	printf("%p\n", &u.c);

	return 0;
}

 这样的打印结果证明了这个特征。

2.联合的特点

成员共用一块空间,那么这样一个联合变量的大小,至少是最大成员的大小,才能使得联合有能力保存最大的那个成员。

这些成员无法同时调用,在修改其中一个成员时,可能会破坏另一个成员的数据。

3.利用共用内存的特征测试大小端

#include <stdio.h>

//测试大小端
int CheckSys() {
	union Un {
		int i;
		char c;
	} u;
	u.i = 1;
	return u.c;
}

int main() {
	int ret = CheckSys();
	if (ret == 1) {
		printf("小端");
	} else {
		printf("大端");
	}
	return 0;
}

与匿名结构体相似,存在匿名共用体(无标签,只能使用一次)

union
{
    int i;
	char c;
} u;

4.共用体大小的计算

  • 至少是最大成员的大小
  • 当最大成员大小不是成员最大对齐数的整数倍时,就要对齐到最大对齐数的整数倍
  • 数组的对齐数是其元素的对齐数
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值