在 C 语言编程的世界里,结构体(struct)和枚举(enum)是两个极为重要的工具,它们虽都用于组织数据,却有着截然不同的特性与用途。
一、结构体:数据的打包利器
结构体像是一个万能的收纳盒,能把不同类型的数据整合到一起。定义结构体时,就如同定制这个收纳盒的内部格局,指明它包含哪些成员变量,以及每个变量的类型。例如:
struct Student {
char name[20];
int age;
float score;
};
这里创建了一个名为“Student”的结构体,用来存放学生的姓名、年龄和成绩信息。使用结构体时,可声明结构体变量:
struct Student stu1;
stu1.age = 18;
strcpy(stu1.name, "Tom");
stu1.score = 90.5;
结构体的优势在于对复杂数据的封装,现实场景中,如记录员工档案、游戏角色属性等,只要涉及多类型数据组合,结构体就大显身手,让代码条理清晰,数据管理便捷。
二、枚举:限定取值的魔法清单
枚举则像是一份预先定制的魔法清单,它列出所有可能的取值,变量只能从中选择。定义如下:
enum Weekday {
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
};
声明枚举变量:
enum Weekday today;
today = MONDAY;
枚举默认从 0 开始给每个成员赋值,依次递增,当然也能手动指定值。它的妙处在于限定变量取值范围,增强代码可读性与健壮性。像表示一周七天、信号灯颜色等固定取值场景,枚举有效防止不合理输入,让程序逻辑严谨。
三、二者关键区别
1. 数据类型本质:结构体是多种数据类型的组合体,成员变量可独立操作;枚举是一种特殊整数类型,取值限于定义的枚举常量。
2. 内存占用:结构体大小为各成员变量所占空间之和(考虑内存对齐);枚举通常占用与基础整数类型相同的空间,如 4 个字节(依编译器而定)。
3. 用途侧重:结构体用于封装复杂关联数据;枚举专注于限定变量取值,使程序表意明确。