济宁专业网站建设,网站建设公司软文,住房和城乡建设部网站办事大厅,2022最新英雄合击手游#x1f307;个人主页#xff1a;_麦麦_ #x1f4da;今日名言#xff1a;如果不去遍历世界#xff0c;我们就不知道什么是我们精神和情感的寄托#xff0c;但我们一旦遍历了世界#xff0c;却发现我们再也无法回到那美好的地方去了。当我们开始寻求#xff0c;我们就已… 个人主页_麦麦_ 今日名言如果不去遍历世界我们就不知道什么是我们精神和情感的寄托但我们一旦遍历了世界却发现我们再也无法回到那美好的地方去了。当我们开始寻求我们就已经失去而我们不开始寻求我们根本无法知道自己身边的一切是如此可贵。——《小王子》 目录 一、前言 二、正文
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//颜色
{Red5,Green2,Blue0
};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//颜色
{Red5, //初始化为5Green2, //初始化为2Blue0 //初始化为0
};int main()
{Red2; //初始化之后是不可以再改变默认值的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 //颜色
{RED1,GREEN2,BLUE4
};enum Color clrGREEN; 注既然枚举是一种类型就可以重定义 typedef enum Color //颜色
{RED1,GREEN2,BLUE4
}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]; //对齐数1int n; //对齐数4
};int main()
{union UN un;printf(%d\n, sizeof(un));return 0
} 三、结语 到此为止关于C语言自定义类型点的学习就告一段落了。 关注我 _麦麦_分享更多干货_麦麦_的博客_CSDN博客-领域博主 大家的「关注❤️ 点赞 收藏⭐」就是我创作的最大动力谢谢大家的支持我们下期见