首页IT科技c语言枚举类型是什么(C语言进阶——自定义类型:枚举、联合)

c语言枚举类型是什么(C语言进阶——自定义类型:枚举、联合)

时间2025-05-03 04:49:56分类IT科技浏览3151
导读:🌇个人主页:_麦麦_...

🌇个人主页:_麦麦_

📚今日名言:如果不去遍历世界          ,我们就不知道什么是我们精神和情感的寄托               ,但我们一旦遍历了世界     ,却发现我们再也无法回到那美好的地方去了          。当我们开始寻求          ,我们就已经失去               ,而我们不开始寻求     ,我们根本无法知道自己身边的一切是如此可贵               。——《小王子》

目录

一          、前言

 二               、正文

1.枚举

1.1枚举的定义 

 1.2枚举的优点

3.3枚举的使用

2.联合体(共用体)

2.1联合类型的定义

2.2联合的特点

 2.3联合大小的计算

 三     、结语

一          、前言

        在前几篇文章中我们已经了解了结构体并用结构体来实现了通讯录     ,但其实C语言中的自定义类型还有两大成员:枚举联合     。在接下来的篇幅中我们就将对这两位成员进行详细地讲解!

 二               、正文

1.枚举

        枚举               ,顾名思义就是一一列举          ,把可能的取值一一列举     。比如我们显示生活中:一周的星期一到星期日是有限的7天     ,可以一一列举               。性别也可以一一列举成:男     、女          。

1.1枚举的定义 

         枚举是一种自定义类型               ,有了类型我们就可以创建变量          ,那么具体要怎么使用呢,见如下代码:

enum Day//星期 { Mon, Tues, Wed, Thur, Fri, Sat, Sun }; enum Sex//性别 { MALE, FEMALE, SECREAT }; enum Color//颜色 { Red, Green, Blue };

         以上定义的“enum Day          ”               ,“enum Sex               ”               ,“enum Color     ”都是枚举类型     。{}中的内容是枚举类型的可能取值,也叫枚举常量               。这些可能取值都是有值的          ,默认从0开始               ,一次递增1     ,当然也可以赋初值          。

#include <stdio.h> enum Color//颜色 { Red=5, Green=2, Blue=0 }; enum Sex//性别 { MALE, FEMALE, SECREAT }; int main() { printf("MALE=%d\n", MALE); printf("FEMALE=%d\n", FEMALE); printf("SECREAT=%d\n", SECREAT); printf("小伙伴们%d", Red); printf("%d", Green); printf("%d", Blue); return 0; }

注:一旦当我们初始化之后          ,就不可以再修改默认值了哦。 

enum Color//颜色 { Red=5, //初始化为5 Green=2, //初始化为2 Blue=0 //初始化为0 }; int main() { Red=2; //初始化之后是不可以再改变默认值的 return 0; }

 1.2枚举的优点

        有的小伙伴可能会问:既然枚举中的内容是枚举常量               ,那么我们也可以使用“#define          ”来定义常量     ,为什么非要使用枚举呢?

枚举的优点

1.增加代码的可读性和可维护性

2.防止了命名污染(封装)

3.和#define定义的标识符有类型检查     ,更加严谨

4.便于调试

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

        下面我们以通讯录为例来讲讲枚举为什么可以增加代码的可读性               。在看过上一篇通讯录的文章后          ,有的小伙伴下来在敲写case代码的时候     ,可能看到数字一时无法想起这个数字到底代表的是什么功能               ,那么我们就使用枚举来对通讯录进行一次小小的优化               。

enum fac { Exit, Add, Del, Search, Modify, Show, Sort }; int main() { contact Contact; //创建通讯录 contact tmp; Init_Contact(&Contact); //初始化通讯录 Init_Contact(&tmp); int input = 0; do { menu(); //打印菜单 printf("请选择你所需的功能:"); scanf("%d", &input); switch (input) { case Add: AddContect(&Contact); break; case Del: DelContect(&Contact); break; case Search: SearchContect(&Contact); break; case Modify: ModifyContect(&Contact); break; case Show: ShowContect(&Contact); break; case Sort: sortContect(&Contact,&tmp); break; case 0: printf("退出通讯录\n"); break; default: printf("输入错误          ,请重新输入\n"); } } while (input); return 0; }

3.3枚举的使用

enum Color //颜色 { RED=1, GREEN=2, BLUE=4 }; enum Color clr=GREEN;

 注:既然枚举是一种类型,就可以重定义

typedef enum Color //颜色 { RED=1, GREEN=2, BLUE=4 }Color;

2.联合体(共用体)

2.1联合类型的定义

        联合也是一种特殊的自定义类型

        这种类型定义的变量也包含一系列的成员               ,特征是这些成员公用同一块空间(所以联合也叫共用体)               ,但是不能同时使用这块空间。可能小伙伴们听得还是有些云里雾里,代码如下:

//联合体的定义 #include <stdio.h> union UN { char c; int i; }; int main() { union UN un; //猜猜结果如何? printf("%d\n", sizeof(un)); printf("%p\n", &un); printf("%p\n", &(un.c)); printf("%p\n", &(un.i)); return 0; }

        我们可以看出联合体的大小并不是我们想象的至少是5          ,而是4          。并且两个成员的起始地址都是相同的               ,也可以间接说明它们是共用同一片空间的               。 

2.2联合的特点

        联合的成员是共用同一块内存空间的     ,这样一个联合变量的大小          ,至少是最大成员的大小(因为联合至少有能力保存最大的那个成员)     。依旧以上面代码画图演示          。

        我们可以发现 成员’c‘和成员’i‘在第一个字节的空间是共用的               ,不过这一块空间并不是同时使用的     ,当成员’c‘使用的时候就会将这块空间修改成自己的内容     ,成员’i‘也是如此               。

 2.3联合大小的计算

        联合的大小至少是最大成员的大小

        当最大成员大小不是最大对齐数的整数倍的时候               ,就要对齐到最大对齐数的整数倍

//联合的大小 #include <stdio.h> union UN { char c[5]; //对齐数1 int n; //对齐数4 }; int main() { union UN un; printf("%d\n", sizeof(un)); return 0; }

 三     、结语

          到此为止          ,关于C语言自定义类型点的学习就告一段落了     。

          关注我 _麦麦_

分享更多干货:_麦麦_的博客_CSDN博客-领域博主

         大家的「关注❤️ + 点赞👍 + 收藏⭐」就是我创作的最大动力!谢谢大家的支持     ,我们下期见!

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
uniapp router(uniapp-路由uni-simple-router) win8如何清理c盘空间不影响系统(在WIN8中,该如何清理C盘垃圾文件?)