共用体(Union)与枚举(Enum)的表格呈现
以下是C语言中共用体和枚举的对比表格,包括语法、特点及使用场景的总结:
特性 | 共用体(Union) | 枚举(Enum) |
---|---|---|
定义语法 | union 名称 { 类型1 成员1; 类型2 成员2; ... }; | enum 名称 { 枚举常量1, 枚举常量2, ... }; |
内存占用 | 所有成员共享同一内存空间(大小为最大成员的大小)。 | 每个枚举常量默认是int 类型,通常占用4字节(编译器相关)。 |
用途 | 同一时间仅存储一个成员的值,用于节省内存或处理多种数据类型。 | 定义一组命名的整型常量,提高代码可读性。 |
赋值与访问 | 只能同时使用一个成员,赋值新成员会覆盖旧值:<br>union u; u.member1 = 10; | 枚举变量只能赋值为枚举定义的常量:<br>enum color c = RED; |
示例 | c union Data { int i; float f; char str[20]; }; | c enum Week { Mon, Tue, Wed }; |
共用体的代码示例
#include <stdio.h>
union Data {
int i;
float f;
char str[20];
};
int main() {
union Data data;
data.i = 10;
printf("data.i : %d\n", data.i);
data.f = 220.5;
printf("data.f : %f\n", data.f); // 覆盖之前的data.i
strcpy(data.str, "C Programming");
printf("data.str : %s\n", data.str);
return 0;
}
枚举的代码示例
#include <stdio.h>
enum Weekday { Mon = 1, Tue, Wed, Thu, Fri };
int main() {
enum Weekday day = Wed;
printf("Day number: %d\n", day); // 输出 3
if (day == Wed) {
printf("It's Wednesday!\n");
}
return 0;
}
关键区别
- 内存:共用体共享内存,枚举每个常量独立存储。
- 类型安全:枚举提供有限的预定义值,共用体需手动管理当前有效成员。
- 应用场景:共用体适合硬件寄存器映射或协议解析,枚举适合状态码、选项等。