高阶C语言|枚举与联合

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

文章目录

      • 枚举(Enum)
        • 枚举类型的定义
      • 枚举的优点
        • 枚举的使用
      • 联合(共用体,Union)
        • 联合的定义
        • 联合类型的声明
        • 联合变量的定义
        • 联合的特点
        • 联合的使用示例
      • 枚举与联合的对比
      • 总结

枚举(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\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) 适用于节省内存,但需要注意同时访问多个成员可能导致数据混乱。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/967430.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汽车与AI深度融合:CES Asia 2025前瞻

在科技飞速发展的当下&#xff0c;汽车与AI的融合正成为行业变革的关键驱动力。近日&#xff0c;吉利、极氪、岚图、智己等多家车企纷纷官宣与DeepSeek模型深度融合&#xff0c;其中岚图知音更是将成为首个搭载该模型的量产车型&#xff0c;这无疑是汽车智能化进程中的重要里程…

Racecar Gym 总结

1.Racecar Gym 简介 Racecar Gym 是一个基于 PyBullet 物理引擎 的自动驾驶仿真平台&#xff0c;提供 Gymnasium&#xff08;OpenAI Gym&#xff09; 接口&#xff0c;主要用于强化学习&#xff08;Reinforcement Learning, RL&#xff09;、多智能体竞速&#xff08;Multi-Ag…

jupyterLab插件开发

jupyter lab安装、配置&#xff1a; jupyter lab安装、配置教程_容器里装jupyterlab-CSDN博客 『Linux笔记』服务器搭建神器JupyterLab_linux_布衣小张-腾讯云开发者社区 Jupyter Lab | 安装、配置、插件推荐、多用户使用教程-腾讯云开发者社区-腾讯云 jupyterLab插件开发教…

1.Excel:某停车场计划调整收费标准❗(13)

目录 函数VLOOKUP ROUNDUP/ROUNDDOWN函数 NO1​ NO2会计专用类型​ NO3收费标准VLOOKUP​ NO4停放时间&#xff08;天&#xff09;​ NO5金额roundup/rounddown​ ​NO6汇总行​ NO7单元格突出显示​ NO8数据透视表​ 函数VLOOKUP VLOOKUP(收费标准!A3:B5 F4&#xf…

elasticsearch安装插件analysis-ik分词器(深度研究docker内elasticsearch安装插件的位置)

最近在学习使用elasticsearch&#xff0c;但是在安装插件ik的时候遇到许多问题。 所以在这里开始对elasticsearch做一个深度的研究。 首先提供如下链接&#xff1a; https://github.com/infinilabs/analysis-ik/releases 我们下载elasticsearch-7-17-2的Linux x86_64版本 …

Git 分布式版本控制工具使用教程

1.关于Git 1.1 什么是Git Git是一款免费、开源的分布式版本控制工具&#xff0c;由Linux创始人Linus Torvalds于2005年开发。它被设计用来处理从很小到非常大的项目&#xff0c;速度和效率都非常高。Git允许多个开发者几乎同时处理同一个项目而不会互相干扰&#xff0c;并且在…

VMware 虚拟机 ubuntu 20.04 扩容工作硬盘

一、关闭虚拟机 关闭虚拟机参考下图&#xff0c;在vmware 调整磁盘容量 二、借助工具fdisk testubuntu ~ $ df -h Filesystem Size Used Avail Use% Mounted on udev 1.9G 0 1.9G 0% /dev tmpfs 388M 3.1M 385M 1% /run /dev/sda5 …

使用python tk 做UI,实现的步骤如下:

Update UI 先~ 使用python tk 做UI,实现的步骤如下:1、点击初始化按钮后,Robot 回到Home 位置,位置到达后发送Home 给视觉,UI更新Robot位置为 Home 2、点击基准按钮后,Robot 走到POS1,位置到达后发送POS1+++当前位置(Ref_POS1_X、Ref _POS1_Y、Ref _POS1_R)给视觉,UI更…

头条百度批量采集软件说明文档

旧版说明文档《头条号文章批量采集软件4.0版本说明文档&#xff01;头条/微头条文章批量采集》 头条的采集软件已经更新了好多个版本了&#xff0c;一直没有做详细的介绍文档&#xff0c;最近更新了一些功能进去&#xff0c;一块来写一下说明文档。 1、主界面 2、头条作者采集…

Wpf美化按钮,输入框,下拉框,dataGrid

Wpf美化按钮&#xff0c;输入框&#xff0c;下拉框&#xff0c;dataGrid 引用代码后 引用资源 <ControlTemplate x:Key"CustomProgressBarTemplate" TargetType"ProgressBar"><Grid><Border x:Name"PART_Track" CornerRadius&q…

DeepSeek从入门到精通:全面掌握AI大模型的核心能力

文章目录 一、DeepSeek是什么&#xff1f;性能对齐OpenAI-o1正式版 二、Deepseek可以做什么&#xff1f;能力图谱文本生成自然语言理解与分析编程与代码相关常规绘图 三、如何使用DeepSeek&#xff1f;四、DeepSeek从入门到精通推理模型推理大模型非推理大模型 快思慢想&#x…

从MySQL优化到脑力健康:技术人与效率的双重提升

文章目录 零&#xff1a;前言一&#xff1a;MySQL性能优化的核心知识点1. 索引优化的最佳实践实战案例&#xff1a; 2. 高并发事务的处理机制实战案例&#xff1a; 3. 查询性能调优实战案例&#xff1a; 4. 缓存与连接池的优化实战案例&#xff1a; 二&#xff1a;技术工作者的…

大语言模型实践——基于现有API的二次开发

基于现有的API平台做一些实用的AI小应用。 API服务商&#xff1a;阿里云百炼 云服务器&#xff1a;阿里云&#xff08;2核2GB&#xff09; 部署框架&#xff1a;gradio 调用框架&#xff1a;openai 语言&#xff1a;Python &#xff08;注&#xff1a;若搭建网站或API接口…

Windows逆向工程入门之进制拓展(BIN OCT DEC HEX)

公开视频 -> 链接点击跳转公开课程博客首页 -> ​​​链接点击跳转博客主页 目录 一、进制基础 1. 什么是进制&#xff1f; 二、二进制、八进制、十六进制的定义和规则 1. 二进制 (Binary) 示例&#xff1a; 2. 八进制 (Octal) 示例&#xff1a; 3. 十六进制 (H…

【数据结构】_堆的实现

目录 1. 堆的实现 1.1 Heap.h 1.2 Heap.c 1.3 Test_Heap.c 专栏前文中&#xff0c;已经介绍了入堆及向上调整算法&#xff0c;出堆及向下调整算法&#xff0c;详情见下文&#xff1a; 【数据结构】_堆的结构及向上、向下调整算法-CSDN博客文章浏览阅读352次&#xff0c;点…

重启电脑之后vscode不见了

某天重启电脑之后发现vscode被删除 双击发现是 后面追溯到文件夹下面发现有一个文件夹的名字叫_ 把这个文件夹打开发现之前的包全在这里面 只需要把这个包里面的文件全部移到上一级即可

高级加密标准AES候选算法之一Crypton

目录 (1)轮密钥加 (2)列混合变换 (3)字节替代变换 (4)字节置换变换 Crypton的加密算法 Crypton的解密算法 密钥扩展算法 高级加密标准AES候选算法之一Crypton Crypton算法是由Chae Hoon Lim于1998年设计的,它是被接受为AES侯选者的15种分组密码之一。该算法是…

2025最新主流深度学习算法全解析

深度学习&#xff1a;开启智能时代的钥匙 在当今数字化时代&#xff0c;深度学习无疑是人工智能领域中最为耀眼的明星。它如同一把神奇的钥匙&#xff0c;开启了智能时代的大门&#xff0c;让计算机从简单的数据处理迈向了复杂的智能决策。深度学习通过构建具有多个层次的神经网…

51单片机(国信长天)矩阵键盘的基本操作

在CT107D单片机综合训练平台上&#xff0c;首先将J5处的跳帽接到1~2引脚&#xff0c;使按键S4~S19按键组成4X4的矩阵键盘。在扫描按键的过程中&#xff0c;发现有按键触发信号后(不做去抖动)&#xff0c;待按键松开后&#xff0c;在数码管的第一位显示相应的数字:从左至右&…

如何在浏览器中搭建开源Web操作系统Puter的本地与远程环境

文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 前言 嘿&#xff0c;小伙伴们&#xff01;是不是每次开机都要像打地鼠一样不停地点击各种网盘和应用程序的登录按钮&#xff0c;感觉超级麻烦&#xff1f;更让…