位置: IT常识 - 正文

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

编辑:rootadmin
C语言进阶——自定义类型:枚举、联合

推荐整理分享C语言进阶——自定义类型:枚举、联合(c语音进阶),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:c语言进阶书籍,c语言进阶书籍,c语言进阶教程,c语言进阶学什么,c语言如何进阶 知乎,c语言进阶教程,c语言 进阶,c语言进阶书籍,内容如对您有帮助,希望把文章链接给更多的朋友!

🌇个人主页:_麦麦_

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

目录

一、前言

 二、正文

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, //初始化为5Green=2, //初始化为2Blue=0 //初始化为0};int main(){ Red=2; //初始化之后是不可以再改变默认值的 return 0;} 1.2枚举的优点

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

枚举的优点:

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

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

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

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

4.便于调试

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

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

enum fac{Exit,Add,Del,Search,Modify,Show,Sort};int main(){contactContact;//创建通讯录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];//对齐数1int n;//对齐数4};int main(){union UN un;printf("%d\n", sizeof(un)); return 0;}

 三、结语

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

          关注我 _麦麦_分享更多干货:_麦麦_的博客_CSDN博客-领域博主          大家的「关注❤️ + 点赞👍 + 收藏⭐」就是我创作的最大动力!谢谢大家的支持,我们下期见!

本文链接地址:https://www.jiuchutong.com/zhishi/300292.html 转载请保留说明!

上一篇:图像的傅里叶变换(图像的傅里叶变换和离散余弦变换实验报告)

下一篇:基于小程序制作一个ChatGPT聊天机器人(小程序设计制作)

  • 华为蓝牙耳机怎么开机(华为蓝牙耳机怎么连接电脑)

    华为蓝牙耳机怎么开机(华为蓝牙耳机怎么连接电脑)

  • 165号段是什么运营商(165号段是什么号码)

    165号段是什么运营商(165号段是什么号码)

  • qq群语音最多几个人呢(qq群里的语音通话可以多少人)

    qq群语音最多几个人呢(qq群里的语音通话可以多少人)

  • 剪映删除的视频要如何恢复(剪映删除的视频怎么找回没有云备份)

    剪映删除的视频要如何恢复(剪映删除的视频怎么找回没有云备份)

  • 华为手机如何翻译图片中的英文(华为手机如何翻译图片上的英文)

    华为手机如何翻译图片中的英文(华为手机如何翻译图片上的英文)

  • 抖音表情包怎么保存(抖音表情包怎么下载到手机相册)

    抖音表情包怎么保存(抖音表情包怎么下载到手机相册)

  • 带命令提示符的安全模式怎么输入指令(带命令提示符的安全模式什么意思)

    带命令提示符的安全模式怎么输入指令(带命令提示符的安全模式什么意思)

  • 可以在word2010表格中填入的信息是什么(在word2010中,什么可以作为表格的数据)

    可以在word2010表格中填入的信息是什么(在word2010中,什么可以作为表格的数据)

  • 苹果有分屏功能吗(苹果有分屏功能吗怎么用)

    苹果有分屏功能吗(苹果有分屏功能吗怎么用)

  • 光猫拨号和路由拨号的区别(光猫拨号和路由拨号实测)

    光猫拨号和路由拨号的区别(光猫拨号和路由拨号实测)

  • 手机直播能边充电吗(手机直播边充电连魔三音响转换器)

    手机直播能边充电吗(手机直播边充电连魔三音响转换器)

  • qq群课堂会有记录吗(qq群课堂会不会看到自己)

    qq群课堂会有记录吗(qq群课堂会不会看到自己)

  • snmsung什么牌子的手机(snmsung什么牌子的手机多少钱)

    snmsung什么牌子的手机(snmsung什么牌子的手机多少钱)

  • wsn网关的主要功能(网关的作用)

    wsn网关的主要功能(网关的作用)

  • 抖音点赞一万提现多少(抖音点赞10000)

    抖音点赞一万提现多少(抖音点赞10000)

  • 宽带运营商服务器未响应(宽带运营商服务器未响应怎么解决)

    宽带运营商服务器未响应(宽带运营商服务器未响应怎么解决)

  • 双11退货红包能退回吗(双11退货红包能退吗)

    双11退货红包能退回吗(双11退货红包能退吗)

  • 苹果7plus卡贴机激活步骤(苹果7plus卡贴机怎么样)

    苹果7plus卡贴机激活步骤(苹果7plus卡贴机怎么样)

  • soul怎么加认识的人(soul怎么加好友)

    soul怎么加认识的人(soul怎么加好友)

  • 抖音原创音乐怎么制作(抖音原创音乐怎么弄)

    抖音原创音乐怎么制作(抖音原创音乐怎么弄)

  • 一码通个人如何注册开通(一码通怎么申请二维码)

    一码通个人如何注册开通(一码通怎么申请二维码)

  • vivoy67怎么软件搬家(vivo怎么打开软件)

    vivoy67怎么软件搬家(vivo怎么打开软件)

  • oppoa59s听筒声音小怎么办

    oppoa59s听筒声音小怎么办

  • 马哈拉施特拉邦的Varandha Ghat,印度 (© AmitRane1975/iStock/Getty Images Plus)(马哈拉施特拉邦人口)

    马哈拉施特拉邦的Varandha Ghat,印度 (© AmitRane1975/iStock/Getty Images Plus)(马哈拉施特拉邦人口)

  • java如何指定枚举的行为(java枚举写法)

    java如何指定枚举的行为(java枚举写法)

  • Python:支持向量机SVM的使用(Python支持向量能干什么)

    Python:支持向量机SVM的使用(Python支持向量能干什么)

  • 职工产假津贴怎么领取
  • 税务中的三费是指什么
  • 汇算清缴时有哪些需要调整的项目
  • 中兴通技术维护费
  • 小企业会计准则和企业会计准则的区别
  • 小企业会计准则和企业会计准则的区别
  • 开具红字专用发票的情形
  • 小规模纳税人出租不动产税率是5%还是3%
  • 前期物业管理公司
  • 生产性服务业定义
  • 补偿金需要缴纳个税分开
  • 福利企业的增值税是多少
  • 社保打的生育保险怎么做账
  • win10无法设置pin码怎么办
  • 开办费属于什么科目类别
  • 财务软件的摊销额计入管理费用
  • office2016安全模式
  • 初级会计中应收账款贴现
  • 房地产企业前期物业费
  • 外币账户收到应收账款
  • 发票明细与实际不符是什么行为
  • 未取得发票的工程预付款怎么入账
  • 会计分录的表现形式有
  • 解决口苦最快的方法
  • iframe frame
  • 增值税发票开错了可以退吗
  • laravel框架用到哪些设计模式
  • 从银行提取现金分录
  • php生成随机字母数字代码
  • 每个开发人员都有编制吗
  • 如何使用axios直接发送GET请求
  • 计入固定资产的条件
  • 长期待摊费用当月发生当月要摊吗
  • mongodb主备配置
  • 查财务报表的网站有哪些
  • 现金发放工资会计科目怎么写
  • 实收资本核算有哪些要求
  • 契税怎么征
  • 财务报表怎么重新编制
  • 个人名字的发票可以报销吗
  • 公司 用车
  • 有进项发票没有销项发票怎样做账
  • 以前年度损益调整会计分录
  • 其他权益工具影响所得税吗
  • 制造费用和直接人工的关系
  • 已认证未记账
  • 技术服务费如何赋码
  • 红字发票抵扣时增值税纳税申报表如何处理
  • 客户要扣货款太多怎么处理
  • 其他应收款款项性质如何填写
  • 5000元固定资产一次性计提折旧
  • 开始建账需要哪些数据
  • sql中存储过程的用法
  • windows server 2008 r2激活密钥
  • ubuntu20设置wifi
  • windows有哪些好用的软件
  • 电脑周边是什么
  • win8 开机
  • win1020h2正式版
  • 如何查看激活日期苹果
  • linux远程gui
  • windows7安全更新服务
  • javascript entries
  • easyui combobox设置值
  • [置顶]JM259194
  • node 删除文件
  • Node.js中的全局变量有哪些
  • 网页css加载失败
  • jquery选择器的使用
  • pyqt用法
  • Unity3D Vuforia Android 相机调焦
  • linux的python
  • 江西省国家税务局电子税务局
  • 北京市税务总局官网
  • 税务局发票邮寄回来怎么读入?
  • 江西省国家税务局
  • 专利转让个人所得税转换为经营所得
  • 汽车契税和购置税一样吗
  • 一般纳税人企业所得税怎么征收
  • 为什么每个月总有几天
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设