您现在的位置是:首页 >技术教程 >高阶C语言|枚举与联合网站首页技术教程

高阶C语言|枚举与联合

我想吃余 2025-06-16 00:01:04
简介高阶C语言|枚举与联合

💬 欢迎讨论:在阅读过程中有任何疑问,欢迎在评论区留言,我们一起交流学习!
👍 点赞、收藏与分享:如果你觉得这篇文章对你有帮助,记得点赞、收藏,并分享给更多对C语言感兴趣的朋友!

枚举(Enum)

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

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

  • 一周的七天(星期一到星期日)。
  • 性别(男、女、保密)。
  • 月份(12个月)。
枚举类型的定义
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,但也可以自定义初始值,如下:

enum Color // 颜色
{
    RED = 1,
    GREEN = 2,
    BLUE = 4
};

枚举的优点

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

枚举的优点包括:

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

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

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


联合(共用体,Union)

联合的定义

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

联合类型的声明
union Un
{
    char c;
    int i;
};
联合变量的定义
union Un un;
联合的特点
  1. 共用同一块内存
    • 联合中的所有成员共享同一块存储空间,大小由最长的成员决定。
  2. 节省内存
    • 由于所有成员共用同一块空间,联合适用于节省存储的场景。
  3. 只能存储一个成员的值
    • 由于所有成员共用一块内存,在某一时刻只能存储一个成员的值,存储新值会覆盖之前的值。
联合的使用示例
#include <stdio.h>

union Data
{
    int i;
    float f;
    char str[20];
};

int main()
{
    union Data data;
    data.i = 10;
    printf("data.i: %d
", data.i);
    
    data.f = 220.5;
    printf("data.f: %f
", data.f);
    
    strcpy(data.str, "Hello");
    printf("data.str: %s
", data.str);
    
    return 0;
}

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

枚举与联合的对比

特性枚举(enum)联合(union)
目的定义一组有限的离散值节省存储空间,多个变量共用一块内存
存储每个枚举值独占存储空间所有成员共享存储空间
用途适用于表示固定的类别、状态等适用于需要在不同时间存储不同类型数据的场景

总结

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

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

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。