首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >【落羽的落羽 C语言篇】自定义类型——联合体、枚举

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

作者头像
用户11956881
发布2025-12-18 19:02:59
发布2025-12-18 19:02:59
50
举报
在这里插入图片描述
在这里插入图片描述

一、联合体

1. 联合体类型的声明

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

代码语言:javascript
复制
union name
{
    member
    member
    ......
};

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

2. 联合体的特点

  • 因为联合体的成员是共用一块内存空间的,所以给其中一个成员赋值,其他成员的值也会跟着变化。
  • 一个联合体变量的地址和其中任意一个成员的地址都是相同的。
  • 结构体成员同一时间只能使用一个。

3. 联合体的大小

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

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

代码语言:javascript
复制
struct s
{
    char c1;
    int i1;
};

union u
{
    char c2;
    int i2;
};

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

在这里插入图片描述
在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述

二、枚举

1. 枚举类型的声明

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

枚举的声明方式是:

代码语言:javascript
复制
enum name
{
    member,
    member,
    ......
    //注意,member后是逗号,最后一个成员后不写逗号
};

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

比如:

代码语言:javascript
复制
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定义的符号。
  • 使用方便,一次可以定义多个变量。
  • 枚举常量遵循作用域规则,枚举声明在函数内的话,也就只能在函数内使用。

本篇完,感谢阅读

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-12-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、联合体
    • 1. 联合体类型的声明
    • 2. 联合体的特点
    • 3. 联合体的大小
    • 4. 联合体和结构体的对比
  • 二、枚举
    • 1. 枚举类型的声明
    • 2. 枚举类型的优点
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档