admin管理员组

文章数量:1442839

高阶C语言

枚举(Enum)

枚举,顾名思义,就是将可能的取值一一列举。

在现实生活中,很多事物的取值范围是有限的,可以使用枚举来定义,例如:

  • 一周的七天(星期一到星期日)。
  • 性别(男、女、保密)。
  • 月份(12个月)。
枚举类型的定义
代码语言:javascript代码运行次数:0运行复制
enum Day // 星期
{
    Mon,
    Tues,
    Wed,
    Thur,
    Fri,
    Sat,
    Sun
};

enum Sex // 性别
{
    MALE,
    FEMALE,
    SECRET
};

enum Color // 颜色
{
    RED,
    GREEN,
    BLUE
};

在以上定义的 enum Dayenum Sexenum Color 中,{} 内的内容是枚举类型的可能取值,也叫枚举常量

枚举常量默认从 0 开始,依次递增 1,但也可以自定义初始值,如下:

代码语言:javascript代码运行次数:0运行复制
enum Color // 颜色
{
    RED = 1,
    GREEN = 2,
    BLUE = 4
};
枚举的优点

我们可以使用 #define 定义常量,为什么非要使用枚举?

枚举的优点包括:

  1. 增加代码的可读性和可维护性
  2. 相较于 #define,枚举具有类型检查功能,更加严谨
  3. 防止命名污染(封装)
  4. 便于调试
  5. 使用方便,一次可以定义多个常量
枚举的使用
代码语言:javascript代码运行次数:0运行复制
enum Color // 颜色
{
    RED = 1,
    GREEN = 2,
    BLUE = 4
};

enum Color clr = GREEN; // 只能用枚举常量赋值,保证类型安全

注意: 避免直接使用枚举常量的整数值赋值给枚举变量,否则可能出现类型不匹配问题。


联合(共用体,Union)
联合的定义

联合类型的变量也包含一系列的成员,不同之处在于所有成员共用同一块存储空间,因此联合也被称为共用体

联合类型的声明
代码语言:javascript代码运行次数:0运行复制
union Un
{
    char c;
    int i;
};
联合变量的定义
代码语言:javascript代码运行次数:0运行复制
union Un un;
联合的特点
  1. 共用同一块内存
    • 联合中的所有成员共享同一块存储空间,大小由最长的成员决定。
  2. 节省内存
    • 由于所有成员共用同一块空间,联合适用于节省存储的场景。
  3. 只能存储一个成员的值
    • 由于所有成员共用一块内存,在某一时刻只能存储一个成员的值,存储新值会覆盖之前的值。
联合的使用示例
代码语言:javascript代码运行次数:0运行复制
#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);
    
    strcpy(data.str, "Hello");
    printf("data.str: %s\n", data.str);
    
    return 0;
}

在上述代码中,data 变量存储 intfloatchar 三种类型的数据,但由于它们共用同一块内存,每次存储新的值会覆盖先前存储的值

枚举与联合的对比

特性

枚举(enum)

联合(union)

目的

定义一组有限的离散值

节省存储空间,多个变量共用一块内存

存储

每个枚举值独占存储空间

所有成员共享存储空间

用途

适用于表示固定的类别、状态等

适用于需要在不同时间存储不同类型数据的场景

总结
  • 枚举(enum) 适用于定义有限的取值范围,提高可读性和安全性。
  • 联合(union) 适用于节省内存,但需要注意同时访问多个成员可能导致数据混乱。

合理选择枚举和联合,可以使代码更加高效、清晰和易维护。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-03-31,如有侵权请联系 cloudcommunity@tencent 删除变量内存数据存储data

本文标签: 高阶C语言