千家信息网

C语言中枚举和联合体的示例分析

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,这篇文章主要介绍了C语言中枚举和联合体的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。枚举什么是枚举?顾名思义,就是一一列举,
千家信息网最后更新 2026年11月04日C语言中枚举和联合体的示例分析

这篇文章主要介绍了C语言中枚举和联合体的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

枚举

什么是枚举?

顾名思义,就是一一列举,把所有的情况,所有的取值,一一列举出来。

在我们生活中,有不少的东西是可以全部列举出来的。

如一个星期有七天,一年有十二个月,性别有男和女,评价有优秀、良好、及格和不及格等等。

当某些数据的值只有固定的几种可能取值的时候,我们就可以使用枚举类型。

枚举类型的定义

enum 枚举类型名 { 枚举值1 ,枚举值2,… ,枚举值n };

枚举类型的定义和结构体类似,先使用enum这个关键字,后面加上枚举类型的名字,括号内是枚举的值,最后别忘记分号。

还有,最后的一个枚举值后面不需要逗号!

一般定义枚举类型的方法如下:

注意:这是定义枚举类型,而不是定义枚举变量!

例如如下:

enum Day//星期{        Mon,        Tues,        Wed,        Thur,        Fri,        Sat,        Sun};enum Sex//性别{        MALE,        FEMALE,        SECRET};enum Color//颜色{        RED,        GREEN,        BLUE};

此外,还有其他的一些定义的方法。

枚举类型的优点

那么我们来思考一个问题,为什么需要枚举呢?

我们其实可以通过#define的方式来定义常量,那么我们还需要定义枚举吗?

其实是需要的。

在有些情况下,枚举可以让我们的代码更加清晰明了。

比如,我们在需要打印菜单的时候,就需要有不同的选项,那么每一个选项就对应一个值,那么我们可以使用枚举让数值与对应的含义对上号,那么这就可以让我们在实现每一个具体的细节的时候,知道这一种case情况对应的具体含义。

此外,还有别的优点:

  • 防止了命名污染(封装)

  • 便于调试

  • 使用方便,一次可以定义多个常量

枚举类型的使用

通过枚举类型,我们可以定义枚举变量

enum Color//颜色{        RED,        GREEN,        BLUE};//使用方法和其他类型一直,就像int a;一样enum Color clr;//使用枚举值来给枚举类型赋值clr = RED;//注意,一般我们给枚举赋值的时候,都用枚举值,而不用其他的值,否则就没有什么意义了

我们一般使用结构体的时候,都像上面的栗子一样。

先创建好枚举的模板,燃用这个模板来创建变量。

此外,还有其他的方法:

创建模板的同时定义枚举变量

enum Color//颜色{        RED,        GREEN,        BLUE}clr1,clr2;//在最后这里,我们定义了两个枚举变量

省略枚举类型名字,匿名创建枚举变量

enum {        RED,        GREEN,        BLUE}clr1,clr2;//这里定义了两个枚举变量

上面的两个变量依旧可以使用,只是,我们没有写出该枚举类型的名字,就只能这样来定义变量,以后不能在利用这个模板来创建变量了

使用typedef来给枚举类型重命名

typedef enum Color//颜色{        RED,        GREEN,        BLUE}cr;//注意,这里的cr是新的枚举类型名字,不是定义的枚举变量//还可以匿名重命名typedef enum {        RED,        GREEN,        BLUE}cr;
枚举中需要注意的点
  • 枚举值只能是整型的数据,如字符、整数等,不能是浮点型

  • 枚举类型变量赋值的时候,一般用枚举值来赋值,不适用其他的数值来赋值

  • 枚举值本身是一个常量,我们可以对枚举变量的值进行修改,但不能对枚举值进行修改

  • 枚举值被处理的时候,会被看成整数数值,因此枚举变量可以算术运算、关系运算等

联合体

联合体类型的定义

union 联合体类型名 { 数据类型 成员名1 , 数据类型 成员名 2 , … , 数据类型 成员名n;};

联合体也叫共用体,这个也是一种特殊的数据类型。

这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间。

栗子如下:

union Un{        char c;        int i;};
联合体的特点

联合体变量的成员是使用共同的一块空间的。

联合体的大小,至少是成员中最大成员的大小。
(这里的至少我们后面再说)

#includeunion Un{        int i;        char c;};union Un un;int main() {        // 下面输出的结果是一样的吗?        printf("%p\n", &un);        printf("%p\n", &(un.i));        printf("%p\n", &(un.c));        return 0;}

运行上面的代码,我们会发现三个地址都相同

成员变量i是第一个成员,该地址和联合体的地址相同我们可以理解,c作为第二个成员变量,其地址也是和第一个成员变量的地址相同,那么这就说明,它们确实使用的是同一块空间

联合体的使用

联合体类型定义变量的方法,和结构体、枚举类似,都有多种方法

先创建模板,在定义变量

union Un{        int i;        char c;};union Un un;

创建模板的同时定义变量

union Un{        int i;        char c;}un;//此处的un是一个联合体变量

匿名定义联合体变量

union {        int i;        char c;}un;//此处的un是一个联合体变量

同样的,由于联合体类型名的省略,我们只可以这样来定义变量,后面就再也不能使用该模板来定义变量了

typedef重命名联合体类型名

typedef union Un{        int i;        char c;}un;typedef union{        int i;        char c;}un;
联合体存在内存对齐

上面说到,联合体的大小,至少是最大成员变量的大小。为什么是至少呢?

我们先来看下面的栗子:

union Un {        char arr[6];        short s;};union Un u;int main() {        // 下面输出的结果是一样的吗?        printf("%u", sizeof(union Un));        return 0;}

上面的代码输出的结果为6

如果我们把字符数组的大小改成5,会发现大小还是6

这是因为,联合体中也存在着对齐

上面的栗子中,会认为字符数组的默认对齐数为1,而short的默认对其数位2,但是成员变量的大小会根据数组的大小来计算,而不是根据数组的元素类型。假如你是元素个数为6的字符数组,那么大小就是6,元素个数为5的字符数组,大小就是5,而int、short等数据类型就按照默认的大小来计算。

首先需要联合体的大小至少是最大成员变量的大小。

然后要求大小应该为各个成员变量中,最大对齐数的倍数,如果不是倍数,那么对齐到整数倍处。

这就能说明,为什么上面的代码把字符数组的大小改为5个元素的时候,联合体的大小仍然为6.

感谢你能够认真阅读完这篇文章,希望小编分享的"C语言中枚举和联合体的示例分析"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

变量 类型 联合体 联合 大小 成员 时候 数据 数组 模板 面的 方法 字符 最大 代码 元素 名字 地址 篇文章 颜色 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 西安纸贵互联网科技有限公司 云信互联网科技有限公司 国智互联网科技 善班互联网科技 宜安科技 互联网金融 亿账通互联网科技 华中科技有哪些互联网大佬 科技赋能互联网健康 青岛中康互联网医疗科技有限公司 广州慧亚互联网科技怎么样 团飞科技与伯堂互联网服务平台 重庆互联网医院沙龙医盟信息科技 苏州铭阳互联网科技有限公司 银川新华互联网科技学校联系电话 黑云互联网科技有限公司 互联网营销推广黑科技 福建互联网展示科技馆设计 上海万顺科技互联网有限公司招聘 保山互联网科技靠谱吗 如何强化互联网金融科技 为想互联网科技怎么样 互联网科技与金融科技 合肥互联网科技公司 互联网科技公司需要的职位 互联网为啥属于高科技 武汉健翔互联网络科技有限公司 为客找房互联网科技公司怎么样 云南省自由互联网科技有限公司 工业互联网科技创业 吉林省码上互联网科技电话
0