位置: 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聊天机器人(小程序设计制作)

  • 华为nova9pro能拍月亮吗(华为nova9pro能拍星空吗)

    华为nova9pro能拍月亮吗(华为nova9pro能拍星空吗)

  • oppofindn怎么截屏(oppofindn怎么截屏分屏)

    oppofindn怎么截屏(oppofindn怎么截屏分屏)

  • 如何取消华为应用市场安全检测(如何取消华为应用市场密码)

    如何取消华为应用市场安全检测(如何取消华为应用市场密码)

  • 微信定位店铺位置怎么设置(微信定位店铺位置怎么设置免费)

    微信定位店铺位置怎么设置(微信定位店铺位置怎么设置免费)

  • 华为p30pro屏幕抗摔吗(p30pro屏幕评测)

    华为p30pro屏幕抗摔吗(p30pro屏幕评测)

  • 苹果发表情短信要钱吗(苹果手机发表情短信)

    苹果发表情短信要钱吗(苹果手机发表情短信)

  • i510400配什么主板(i510400配什么主板能跑满)

    i510400配什么主板(i510400配什么主板能跑满)

  • 抖音快进特效在哪里(抖音里面的快进视频在哪里设置)

    抖音快进特效在哪里(抖音里面的快进视频在哪里设置)

  • 淘宝三颗心是什么等级(淘宝三颗心可以上多少宝贝)

    淘宝三颗心是什么等级(淘宝三颗心可以上多少宝贝)

  • 商品链接怎么复制(商品链接怎么复制进电子表格)

    商品链接怎么复制(商品链接怎么复制进电子表格)

  • 苹果7加减音量键失灵(苹果加减音量键上面那个是什么)

    苹果7加减音量键失灵(苹果加减音量键上面那个是什么)

  • 相机hdr功能是什么意思(相机hdr什么意思啊)

    相机hdr功能是什么意思(相机hdr什么意思啊)

  • am3和am3+ cpu能通用吗(am3和am2+ cpu能通用吗)

    am3和am3+ cpu能通用吗(am3和am2+ cpu能通用吗)

  • 钉钉群有人数限制吗(钉钉群的人数限制)

    钉钉群有人数限制吗(钉钉群的人数限制)

  • 小米wifi按钮打不开(小米wifi按钮打开又关闭)

    小米wifi按钮打不开(小米wifi按钮打开又关闭)

  • qq举报别人 别人知道吗(qq举报别人别人能不能举报自己)

    qq举报别人 别人知道吗(qq举报别人别人能不能举报自己)

  • 电脑可以下载手写输入法吗(电脑可以下载手机版剪映吗)

    电脑可以下载手写输入法吗(电脑可以下载手机版剪映吗)

  • ps变黑白怎么恢复(ps变黑白怎么恢复彩色)

    ps变黑白怎么恢复(ps变黑白怎么恢复彩色)

  • 苹果x模仿人脸表情在哪(苹果模拟人脸)

    苹果x模仿人脸表情在哪(苹果模拟人脸)

  • r17有没有nfc功能(oppo带不带nfc功能)

    r17有没有nfc功能(oppo带不带nfc功能)

  • 怎样设置电话正在通话中(怎样设置电话正在通话中苹果手机)

    怎样设置电话正在通话中(怎样设置电话正在通话中苹果手机)

  • 时间长的视频怎么发朋友圈(时间长的视频怎么发给QQ好友)

    时间长的视频怎么发朋友圈(时间长的视频怎么发给QQ好友)

  • 手机只有关机才能充电怎么回事(手机只有关机才能充电怎么办)

    手机只有关机才能充电怎么回事(手机只有关机才能充电怎么办)

  • word时间轴模板(world时间轴)

    word时间轴模板(world时间轴)

  • 5s管理内容和标准(5s管理内容和标准视频)

    5s管理内容和标准(5s管理内容和标准视频)

  • 华为手机通话时不能上网(华为手机通电话)

    华为手机通话时不能上网(华为手机通电话)

  • 注册表被恶意锁定怎么办(注册表被恶意锁定怎么恢复正常)

    注册表被恶意锁定怎么办(注册表被恶意锁定怎么恢复正常)

  • vue3使用svg图标多种方式(vue引用svg矢量图)

    vue3使用svg图标多种方式(vue引用svg矢量图)

  • uncompress命令  压缩或解压缩compress文件(uncompressing)

    uncompress命令 压缩或解压缩compress文件(uncompressing)

  • 普通发票税率1%要交税吗
  • 土地增值税会计核算
  • 工程设备公司经营范围
  • 转让金融资产需要交税吗
  • 个税子女教育扣除需要提供什么资料
  • 工资不纳税项目
  • 租车属于经营租赁吗
  • 制药企业税收优惠政策
  • 预付账款收不回发票怎么核销
  • 汽车保险专用发票可以抵扣吗
  • 行政单位上年度费用做多了怎么调整成本
  • 房地产开发公司注册条件
  • 收入费用类科目结转至本年利润
  • 托收承付销售货物什么意思
  • 国家电网的发票如何申请邮寄
  • 工会经费用于什么
  • excel单元格内换行macbook
  • 小规模增值税缴纳怎么算
  • 企业优惠条件
  • 长期待摊费用无发票怎么处理
  • 应交税费未交增值税是什么意思
  • 准备金税前扣除什么意思
  • 成品油电子普通发票开错了
  • 一万元国债一年多少利息
  • 长期待摊费用与折旧区别
  • 委托代销商品会计分录按成本还是售价
  • 过桥资金法律规定
  • 房产中介如何收取中介费
  • 海关增值税专用缴款书抵扣期限
  • 拆迁的支出费用包括哪些
  • 应收账款账面价值小于计税基础
  • 文件pages
  • 材料成本差异如何理解
  • 字体文件夹在哪
  • 研发费用加计扣除政策指引2.0
  • 公允价值变动损益在利润表哪里
  • 雪花算法workid
  • 成本类账户期末余额在借方还是贷方
  • face_recognition库采用了什么算法
  • 高通芯片开发
  • 基于Pytorch的风格转换
  • php排序方法有几种区别
  • 遍历enumeration
  • 印花税申报时间填错了怎么处理?
  • vue新手教程
  • 简单设置w11
  • ps怎么把皮肤变红润
  • 公司收到银行存款利息回单的会计分录
  • 其它应收款的处理程序
  • 清算汇缴报表填写范本
  • 以前年度损益调整结转到本年利润吗
  • 固定资产处置是当月还是下月
  • 合伙企业法人股东税收
  • 单位买理财产品怎么买
  • 发票系统怎么用
  • 简易征收需要勾选认证吗
  • 税控系统技术维护费会计处理
  • 如何处理公益性岗位问题
  • 固定资产清理贷方余额是什么意思
  • 形成应收账款的会计分录
  • 现金日记账本月合计怎么划线
  • 计入税金及附加借方的内容
  • 陈列费收取标准
  • sql server 数据查询
  • visio.exe是什么进程
  • win10手机预览版
  • linux服务器宕机排查
  • xp直升win7
  • mac如何全屏窗口
  • 怎么判断电脑windows几
  • win10系统玩英雄联盟可以吗
  • javascript的代码
  • css命名大全
  • perl中的$_
  • bootstrap基础
  • node.js的内置模块
  • javascript的for循环
  • 车辆购置税2024年政策
  • 税务责令改正通知书
  • 内蒙古国税网上办税厅
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设