当前位置: 首页 > article >正文

STLG_01_12_程序设计C语言 - 联合体和枚举类型

在C语言中,联合体(Union)和枚举类型(Enum)是两种不同的数据结构,它们各自有特定的用途和特点。

联合体(Union)

联合体是一种数据结构,允许在相同的内存位置存储不同的数据类型。也就是说,联合体的各个成员共享同一块内存空间,因此在任何时刻,联合体中只能有一个成员生效。

定义联合体

联合体的定义与结构体相似,但使用union关键字:

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

使用联合体

  1. 声明联合体变量

    union data myUnion;
    
  2. 访问联合体成员

    使用点操作符(.)来访问成员:

    myUnion.i = 10;
    myUnion.f = 220.5;
    strcpy(myUnion.str, "C Programming");
    

    请注意,由于联合体的成员共享同一块内存,因此修改一个成员会影响其他成员。

  3. 联合体的大小

    联合体的大小等于其最大成员的大小。

    printf("Size of union: %lu bytes\n", sizeof(myUnion));
    

应用场景

  • 节省内存:当多个变量不会同时使用时,可以使用联合体来共享同一块内存,从而节省内存空间。
  • 变体记录:当一个变量可以有多种类型时,联合体可以用来表示这种变体。

枚举类型(Enum)

枚举类型是一种用户定义的数据类型,它允许定义一组命名的常量。枚举类型提高了代码的可读性,并且可以用来表示一组相关的常量。

定义枚举类型

枚举类型的定义使用enum关键字:

enum Weekday {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
};

使用枚举类型

  1. 声明枚举变量

    enum Weekday today;
    
  2. 赋值

    today = MONDAY;
    
  3. 枚举变量的使用

    枚举变量可以像其他变量一样使用,例如在条件语句中:

    if (today == MONDAY) {
        printf("It's Monday!\n");
    }
    

默认值和自定义值

  • 默认值:枚举常量的值从0开始,依次递增1。

    enum Weekday {
        SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY
    };
    

    在这个例子中,SUNDAY是0,MONDAY是1,依此类推。

  • 自定义值

    也可以为枚举常量指定具体的值:

    enum Weekday {
        SUNDAY = 1, MONDAY = 2, TUESDAY = 3, WEDNESDAY = 4, THURSDAY = 5, FRIDAY = 6, SATURDAY = 7
    };
    

应用场景

  • 提高代码可读性:通过使用有意义的名称来表示常量,使得代码更易读和维护。
  • 限制变量的取值范围:枚举类型可以明确变量的可能取值,有助于减少错误。

总结

  • 联合体:允许多个成员共享同一块内存,适合节省内存或表示变体记录。
  • 枚举类型:定义一组命名的常量,提高代码可读性和维护性。

http://www.kler.cn/a/504880.html

相关文章:

  • 如何禁用 PySpark 在运行时打印信息
  • 像JSONDecodeError: Extra data: line 2 column 1 (char 134)这样的问题怎么解决
  • 【数据结构学习笔记】19:跳表(Skip List)
  • SpringBoot整合Easy-es
  • 论文笔记(六十一)Implicit Behavioral Cloning
  • opencv的NLM去噪算法
  • 【AIGC-ChatGPT进阶提示词指令】智慧母婴:打造基于成长树的儿童发展引导系统
  • 【网络云SRE运维开发】2025第3周-每日【2025/01/14】小测-【第13章ospf路由协议】理论和实操解析
  • PPPLib源码阅读
  • 「蓝桥杯题解」数字接龙
  • 石化煤矿智能化转型“硬通货”,遨游防爆手机如何面面俱到?
  • Vue2+OpenLayers实现车辆开始、暂停、重置行驶轨迹动画(提供Gitee源码)
  • UART 串口的全双工模式与 SPI 的全双工模式的区别
  • 达梦数据库数据迁移(mysql迁移到达梦)
  • 4种革新性AI Agent工作流设计模式全解析
  • 力扣cf补题-1【算法学习day.94】
  • 字符串提取数字求和⭐
  • Spring Boot 应用开发中的核心注解及扩展(包含自动配置源码追踪)
  • 2025.1.15——二、字符型注入
  • STM32 物联网智能家居 (三) 输入子系统
  • 语言月赛 202407【significance】题解(AC)
  • Web_HTML+CSS_First_Asignment
  • C#对动态加载的DLL进行依赖注入,并对DLL注入服务
  • 前端组件开发:组件开发 / 定义配置 / 配置驱动开发 / 爬虫配置 / 组件V2.0 / form表单 / table表单
  • linux 端口转发工具rinetd
  • Flask安全开发