- 1、本文档共27页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第19章 共用体枚举与位域
第19章 共用体、枚举和位域 通过本章的学习,需要掌握以下几点: 共用体变量的定义和使用; 枚举变量的定义和使用; 位域变量的定义和使用。 19.1 共用体 共用体(union)是C语言中另一种高级数据结构,它可以使几个不同成员共享同一块内存。合理地使用共用体可以节省内存空间的使用,还可以简化多种复杂数据的处理。本节将讨论共用体类型的概念及其字节长度,以及讨论共用体变量的的使用。 19.1.1 共用体类型 在程序中,有时为了节约内存空间,可以使用共用体来使多个变量共享一块内存。共用体与结构体类似,可以含有多个成员,其声明形式如下: union 共用体名 { 数据类型名 成员名1; 数据类型名 成员名2; 数据类型名 成员名3; … }; 19.1.2 共用体变量 共有体变量的定义方法与结构体变量类似。可以先声明一个共用体类型,再使用该共用体类型来定义共用体变量;也可以直接定义共用体变量;还可以使用typedef来定义一个共用体类型别名,再使用共有体别名来定义共有体变量。仅以第三种形式为例,如下所示。 typedef union _data_u_t { int a; char b; long long c; } data_u_t; data_u_t v; 19.1.2 共用体变量 使用共用体变量需要注意以下几点。 由于共用体实际上只有一个有效成员,因此无法像初始化结构体那样使用多个值的序列对共用体进行初始化,只能使用含一个值的序列对其初始化,如下所示。 01 data_u_t v = {1, ‘c’, 23LL}; /* 错误:不可以使用多个值的序列初始化共用体 */ 02 data_u_t v = {1}; /* 正确:只能使用一个值的序列初始化共用体 */ 19.1.2 共用体变量 不可以直接为共用体变量赋值,需要通过赋值其成员来改变共用体的内存空间。在共用体中,对成员的访问和赋值都与结构体变量类似。例如: 01 v = 2; /* 错误用法 */ 02 v.a = 2; /* 对a成员赋值 */ 03 v.b = ‘c’; /* 对b成员赋值,a成员的值已改变 */ 04 v.c = 23LL; /* 对c成员赋值,a和b的值都已改变 */ 19.1.2 共用体变量 虽然不能为共用体变量赋值,但可以使用共用体变量来获得共用体的值。例如,下列代码中第2行和第3行的输出结果是一样的: 01 v.a = 2; 02 printf(“%d”, v.a); 03 printf(“%d”, v); 由于所有成员共享同一空间,因此所有成员的地址相同。 19.1.2 共用体变量 共用体可以作为数组元素,可以作为结构体成员,也可以作为共用体的成员。 注意赋值的成员和访问的成员的一致性。例如: 01 v.a = 2; 02 printf(“%d\n”, v.a); /* 对a成员赋值,所以访问a成员是可行的 */ 03 printf(“%d\n”, v.b); /* 此时访问b是危险的,得到的是不可知值 */ 由于共用体中的所有成员共享一块空间,因此对任意成员的赋值都会影响其他成员的值。 19.2 枚举 枚举类型是C语言中另一种高级类型。在前面已经学习了可以使用const常量和具名常量来代替程序中的出现的常量数值,枚举类型也可以用来定义常量数值。本节将先讨论枚举类型的概念和枚举类型的定义,再讨论枚举类型的使用场景。 19.2.1 定义枚举类型 在程序中,常常会处理一组相关的属性。例如,为了区别不同的颜色属性,一般会为不同的颜色分配一个常量值,如果用const常量可以作如下处理。 const YELLOW = 1; const RED = 2; const BLUE = 3; const BLACK = 4; 19.2.1 定义枚举类型 可以以如下方式来使用这些const变量。 car_colour = YELLOW; bike_colour = BLUE; 这是一种可行的方法,但是存在最大的缺点是,在使用时无法显式地说明这些不同常量之间存在的关系,同时还无法自动限制这些const常量的值。 19.2.1 定义枚举类型 C语言使用枚举类型为这种情况下的常量替代提供了更好的解决方案。它可以在定义常量的同时,将这些常量结合在一个集合中加强彼此的关系。枚举类型的声明与结构体和共用体的声明略有不同,其形式如下: enum 枚举类型名 { 枚举成员1; 枚举成员2; 枚举成员3; … } 19.2.2 枚举类型的使用 使用枚举类型需要注意以下几点。 1.枚举成员值依次增加1 定义枚举类型时,可以对枚举成员显式赋值,其后的枚举成员同样在该值的基础上加1,如
您可能关注的文档
- 税务鉴证与审核程序.doc
- 税收与宪法_国家法宪法论文_法律论文__3821.doc
- 税收优惠政策国家干预与调控经济的关键.doc
- 税收筹划 课件 第二讲 税收筹划产生原因实施条件与工作.ppt
- 税收筹划内容与方法.doc
- 税务稽查与相关法律.ppt
- 税务筹划建议书关于转让定价与并购.ppt
- 稻盛与夫 干法 下篇.doc
- 稻盛与夫北京大学演讲经营为什么需要哲学.docx
- 税法与私法关系探源——对财产权的确认与保障.doc
- 民航职业技能鉴定能力检测试卷及完整答案详解(必刷).docx
- 2025至2030年中国断路器开闭特性测试台市场现状分析及前景预测报告.docx
- 民航职业技能鉴定能力检测试卷及完整答案详解【易错题】.docx
- 基于核心素养的初中数学学生数学逻辑思维能力的培养与实践策略研究教学研究课题报告.docx
- 初中物理实验报告人工智能教育平台个性化学习路径规划的多目标优化策略分析教学研究课题报告.docx
- 民航职业技能鉴定能力检测试卷完整答案详解.docx
- 汉服产业如何实现品牌文化传播与市场拓展共赢.docx
- 社区公共设施在初中生课余生活中的应用现状与优化措施教学研究课题报告.docx
- 民航职业技能鉴定能力检测试卷及参考答案详解【模拟题】.docx
- 民航职业技能鉴定能力检测试卷及答案详解【名校卷】.docx
文档评论(0)