C语言 枚举、联合体

一、枚举

枚举就是一一列举的意思,生活中有些概念可以被我们人为一一列举出来,如:性别、三原色。性别不是男就是女、三原色为 rgb. 所以,C语言 提供了一种自定义类型的方法,称为 enum,即枚举。

程序清单1

#include <stdio.h>

enum SEX
{
	MALE,
	FEMALE
};

int main()
{
	printf("%d\n", MALE);
	printf("%d\n", FEMALE);

	return 0;
}

// 输出结果:
// 0
// 1

程序清单2

#include <stdio.h>

enum COLOR
{
	RED = 3, 		// 初始化枚举常量的值 √
	GREEN,
	BLUE
};

int main() {

	// RED = 7; 	// 赋值 error

	printf("%d\n", RED);
	printf("%d\n", GREEN);
	printf("%d\n", BLUE);

	return 0;
}

// 输出结果:
// 3
// 4
// 5

程序清单3

#include <stdio.h>

enum COLOR
{
	RED = 3, // 初始化 √
	GREEN,
	BLUE
};

int main() {

	enum COLOR color1 = RED; // 创建一个枚举变量,拿枚举常量为其赋值

	return 0;
}

注意事项:

创建一个枚举变量,最好拿枚举常量为其赋值,不要拿 3 进行赋值。因为枚举常量和枚举变量属于同类型,而拿上面的初始化 3 赋值时,3 是属于整型的数据,所以不规范。

其他的注意事项

① 注意枚举的写法,枚举大括号内的量称为枚举常量,不能被修改。
② 枚举常量的值默认是从 0 开始,依次向 1 2 3 … 递增。
③ 并不是所有东西都能够用枚举表示,例如一名学生的学年成绩,成绩是不具有规律性的,所以无法用枚举列出来。所以枚举只能在某些特定的场景中才能用到。

二、联合体

程序清单1

#include <stdio.h>

union Un {
	char c;		// 1
	int i;		// 4
};

int main() {

	union Un u1;
	printf("%d\n", sizeof(u1)); // 4

	printf("%p\n", &u1);
	printf("%p\n", &(u1.c));
	printf("%p\n", &(u1.i));
	return 0;
}

输出结果:

1-1

从上面的输出结果来看,我们可以得出结论: 联合体的所有成员共用一块内存空间,所以整个联合体所占内存的大小 >= 联合体最大成员的所占内存的大小。

程序清单2

#include <stdio.h>
#include <stddef.h>

union U
{
	short c[7];			// 14
	int i;				// 4
};

int main() {

	printf("%d\n", sizeof(union U)); // 16

	printf("%u ", offsetof(union U, c)); // 0
	printf("%u ", offsetof(union U, i)); // 0
	return 0;
}

1-2

注意事项:

联合体也需要遵循内存对齐的规则,它和结构体的对齐规则相同。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十七ing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值