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

【落羽的落羽 C语言篇】自定义类型——联合体、枚举

在这里插入图片描述

文章目录

  • 一、联合体
    • 1. 联合体类型的声明
    • 2. 联合体的特点
    • 3. 联合体的大小
    • 4. 联合体和结构体的对比
  • 二、枚举
    • 1. 枚举类型的声明
    • 2. 枚举类型的优点

一、联合体

1. 联合体类型的声明

联合体像结构体一样,也是由一个或多个成员构成,这些成员可以是不同的类型。它和结构体的区别在于:编译器只为联合体的最大的成员分配足够的内存空间,所有成员共用这一块内存空间。所以,联合体有时也叫共用体。
它的声明形式是:

union name
{
    member
    member
    ......
};

道理和结构体极为相似,union是C语言中的一个关键字,name自起,member是成员。使用方法也和结构体很相似。

2. 联合体的特点

  • 因为联合体的成员是共用一块内存空间的,所以给其中一个成员赋值,其他成员的值也会跟着变化。

  • 一个联合体变量的地址和其中任意一个成员的地址都是相同的。

  • 结构体成员同一时间只能使用一个。

3. 联合体的大小

  • 一个联合体变量的大小至少是最大的成员的大小。
  • 当最大成员的大小不是最大对齐数的整数倍的时候,就要对齐到最大对齐数的整数倍的地址偏移处。(关于对齐数,详见上期结构体)

4. 联合体和结构体的对比

struct s
{
    char c1;
    int i1;
};

union u
{
    char c2;
    int i2;
};

根据内存对齐的规则,可以看到:

在这里插入图片描述

联合体相比结构体的优点是:在一些特定情况下,使用联合体不影响成员数据的使用,而可以节省内存空间。

在这里插入图片描述

二、枚举

1. 枚举类型的声明

枚举,顾名思义,一一列举,把可能的结果一一列举。
比如,星期一到星期日,可以一一列举。
一年的12个月,也可以一一列举。

枚举的声明方式是:

enum name
{
    member,
    member,
    ......
    //注意,member后是逗号,最后一个成员后不写逗号
};

enum是C语言中的一个关键字,member是枚举类型的可能取值,也叫枚举常量。
这些所有的可能取值都是有值的,从0开始,依次加1。或者自定义可能取值的值,未自定义的默认是上一个枚举常量的值加1。
有了枚举常量,以后的代码中出现同一个变量时,这个变量自动被替换成它的枚举常量。

比如:

enum day
{
    Mon,//0
    Tues,//1
    Wed//2
};
//在下面的代码中,Mon就是0,以此类推

enum color
{
    red=2,//2
    blue,//3
    green=5,//5
    yellow//6
};
//在下面的代码中,red就是2,以此类推

在这里插入图片描述

2. 枚举类型的优点

我们也可以用#define定义常量,为什么要有枚举的存在呢?
枚举独特的优点是:

  • 增加代码的可读性和可维护性。
  • 便于调试,预处理阶段会删除#define定义的符号。
  • 使用方便,一次可以定义多个变量。
  • 枚举常量遵循作用域规则,枚举声明在函数内的话,也就只能在函数内使用。

在这里插入图片描述

本篇完,感谢阅读


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

相关文章:

  • 水电站视频智能监控系统方案设计与技术应用方案
  • springBoot发布https服务及调用
  • kimi搜索AI多线程批量生成txt原创文章软件-不需要账号及key
  • 直流有刷电机多环控制(PID闭环死区和积分分离)
  • EsChatPro 接入国内 DeepSeek 大模型
  • 预览和下载 (pc和微信小程序)
  • 【每日学点鸿蒙知识】沙箱目录、图片压缩、characteristicsArray、gm-crypto 国密加解密、通知权限
  • PyTorch 神经网络回归(Regression)任务:关系拟合与优化过程
  • 首次接触结构安全自动化监测系统,价格高吗?后期维护?
  • FreeRTOS的任务挂起和恢复
  • 高阶:基于Python paddleocr库 提取pdf 文档高亮显示的内容
  • eNSP安装教程(内含安装包)
  • 如何制作期末成绩查询小程序系统?
  • 【magic-dash】01:magic-dash创建单页面应用及二次开发
  • Cornerstone3d 基础概念
  • ECharts散点图-气泡图,附视频讲解与代码下载
  • Pytorch文件夹结构
  • 2024 年12月英语六级CET6听力原文(Long Conersation和Passage)
  • Java期末复习JDBC|网课笔记+校课总结
  • 麒麟系统修改配置镜像源地址并安装openGL
  • WebAssembly与WebGL结合:高性能图形处理
  • Python知识分享第三十五天-Pandas分组聚合
  • Linux 静默安装weblogic及JDK安装
  • chrome主页被被篡改的修复方法
  • 安全见闻(2)
  • 命令手动更新 Navigator