第19章共体枚举和位域

上传人:cn****1 文档编号:579284539 上传时间:2024-08-26 格式:PPT 页数:13 大小:108.50KB
返回 下载 相关 举报
第19章共体枚举和位域_第1页
第1页 / 共13页
第19章共体枚举和位域_第2页
第2页 / 共13页
第19章共体枚举和位域_第3页
第3页 / 共13页
第19章共体枚举和位域_第4页
第4页 / 共13页
第19章共体枚举和位域_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《第19章共体枚举和位域》由会员分享,可在线阅读,更多相关《第19章共体枚举和位域(13页珍藏版)》请在金锄头文库上搜索。

1、第19章 共用体、枚举和位域杨章伟杨章伟e-mail:藩藩掣掣彭彭斯斯抒抒缀缀绿绿昆昆笛笛困困驼驼暮暮叼叼论论屹屹绑绑楔楔哩哩慕慕舆舆拢拢琵琵梅梅愚愚樱樱纂纂狐狐糙糙穷穷脆脆晶晶咖咖第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-2课程内容安排课程内容安排共用体共用体 枚举枚举 位域位域 小结小结 习题习题 霜霜屡屡笨笨棚棚社社蠕蠕把把硝硝阻阻惋惋劝劝蕊蕊绊绊冕冕烦烦寂寂赏赏黄黄蜗蜗日日茂茂敢敢韭韭醛醛驳驳陶陶贾贾掠掠密密镜镜疡疡墒墒第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-3共用体共用体 继继第第18章章介介绍绍了

2、了结结构构体体之之后后,本本章章将将介介绍绍另另外外三三种种高高级级数数据据类类型型:共共用用体体、枚枚举举和和位位域域。这这三三种种数数据据类类型型与与结结构构体体一一样样,都都是是多多个个数数据据单单元元结结合合而而成成的的复复杂杂数数据据单单元元,因因此此,它它们们可可以以用用来来描描述述更更为为复复杂杂的的数数据据形形式式。这这三三种种数数据据类类型型的的适适用用范范围各有不同围各有不同 。共共用用体体(union)是是C语语言言中中另另一一种种高高级级数数据据结结构构,它它可可以以使使几几个个不不同同成成员员共共享享同同一一块块内内存存。合合理理地地使使用用共共用用体体可可以以节节省

3、省内存空间,还可以简化多种复杂数据的处理。内存空间,还可以简化多种复杂数据的处理。 炼炼秤秤改改滴滴凡凡剿剿吱吱棉棉钙钙牲牲苗苗钵钵拌拌援援雌雌誊誊蔫蔫抄抄骇骇疫疫车车井井浮浮魄魄朵朵笆笆膏膏蔗蔗盯盯奶奶谬谬娟娟第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-4声明共用体类型声明共用体类型 在程序中,有时为了节约内存空间,可以使用共用体来在程序中,有时为了节约内存空间,可以使用共用体来使多个变量共享一块内存。共用体与结构体类似,可以使多个变量共享一块内存。共用体与结构体类似,可以含有多个成员,其声明形式如下:含有多个成员,其声明形式如下:union 共用体名

4、共用体名 数据类型名数据类型名 成员名成员名1;数据类型名数据类型名 成员名成员名2;数据类型名数据类型名 成员名成员名3;但与结构体结构不同的是,共用体的所有成员共享同一但与结构体结构不同的是,共用体的所有成员共享同一块内存,而结构体的每个成员都有自己的内存空间。一块内存,而结构体的每个成员都有自己的内存空间。一个共用体类型的字节长度为占用内存空间最多的成员变个共用体类型的字节长度为占用内存空间最多的成员变量的字节长度。量的字节长度。 落落沾沾卓卓凯凯披披雍雍亏亏摇摇废废啄啄炕炕里里衅衅止止徘徘藩藩邑邑讼讼裁裁漓漓襟襟怨怨相相几几堆堆糊糊胞胞坎坎吉吉抠抠楷楷乾乾第第19章章共共体体枚枚举举和

5、和位位域域第第19章章共共体体枚枚举举和和位位域域1-5定义共用体变量定义共用体变量 共有体变量的定义方法与结构体变量类似。可以先声明一共有体变量的定义方法与结构体变量类似。可以先声明一个共用体类型,再使用该共用体类型来定义共用体变量;个共用体类型,再使用该共用体类型来定义共用体变量;也可以直接定义共用体变量;还可以使用也可以直接定义共用体变量;还可以使用typedef来定义来定义一个共用体类型别名,再使用共有体别名来定义共有体变一个共用体类型别名,再使用共有体别名来定义共有体变量。仅以第三种形式为例,如下所示。量。仅以第三种形式为例,如下所示。typedef union _data_u_t

6、int a;char b;long long c; data_u_t;data_u_t v;伍伍离离孤孤疹疹潮潮残残井井杯杯炽炽常常档档呆呆废废符符猪猪赖赖魂魂芒芒阂阂办办鞘鞘宇宇贼贼邪邪补补尼尼闭闭滓滓室室晴晴饵饵夜夜第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-6枚举枚举 枚举类型是枚举类型是C语言中另一种高级类型。在前面已经学习了可以语言中另一种高级类型。在前面已经学习了可以使用使用const常量和具名常量来代替程序中出现的常量数值,枚常量和具名常量来代替程序中出现的常量数值,枚举类型也可以用来定义常量数值。举类型也可以用来定义常量数值。 物物缸缸剩

7、剩抑抑嘶嘶玲玲蓟蓟准准刷刷凿凿煎煎锋锋嚣嚣芥芥展展少少擒擒钵钵识识模模岿岿足足唇唇古古呕呕帛帛钞钞证证晌晌香香谁谁墒墒第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-7声明枚举类型声明枚举类型 C语言使用枚举类型为这种情况下的常量替代提供了更好的解语言使用枚举类型为这种情况下的常量替代提供了更好的解决方案。枚举类型是一组相关数据的集合,它可以在定义常量决方案。枚举类型是一组相关数据的集合,它可以在定义常量的同时,将这些常量结合在一个集合中加强彼此的关系。枚举的同时,将这些常量结合在一个集合中加强彼此的关系。枚举类型的声明与结构体和共用体的声明略有不同,其形式

8、如下:类型的声明与结构体和共用体的声明略有不同,其形式如下:enum 枚举类型名枚举类型名 枚举成员枚举成员1;枚举成员枚举成员2;枚举成员枚举成员3;其中的枚举成员都为其中的枚举成员都为int型,如果没有显式赋值,系统会自动将型,如果没有显式赋值,系统会自动将所有枚举成员从所有枚举成员从0开始赋值,而后面的枚举成员依次比前一个开始赋值,而后面的枚举成员依次比前一个大大1。 署署赤赤棍棍墒墒皿皿济济退退晌晌帖帖皋皋吠吠潘潘刷刷啦啦领领焦焦加加彻彻刚刚钝钝绍绍食食胸胸怀怀医医板板正正罕罕驾驾状状锰锰搬搬第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-8位域位域

9、 在一些任务中,需要处理的信息都只需要占用一个或几个二进制位,在一些任务中,需要处理的信息都只需要占用一个或几个二进制位,这种情况下,如果使用一般的数据结构进行处理,会占用额外的这种情况下,如果使用一般的数据结构进行处理,会占用额外的空间,并增加多余的处理时间。这时,可以使用空间,并增加多余的处理时间。这时,可以使用C语言中的另一语言中的另一种数据结构种数据结构“位域位域”(或称为(或称为“位段位段”)来处理该数据。)来处理该数据。 位域属于结构体,它允许在结构体内以位为单位将其空间划分为多位域属于结构体,它允许在结构体内以位为单位将其空间划分为多个区域,并将其分配给结构体的各个成员。在程序中

10、可以通过操个区域,并将其分配给结构体的各个成员。在程序中可以通过操作位域的各个成员来操作其中的区域。作位域的各个成员来操作其中的区域。 伍伍赊赊彻彻膝膝伤伤蛔蛔斟斟撰撰沤沤令令能能嘎嘎苫苫毁毁吻吻毁毁励励啤啤贾贾色色骑骑朽朽绅绅湿湿份份吭吭架架卢卢萍萍绊绊妆妆欢欢第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-9位域的概念位域的概念 利用位域可以使用较少的字节数来存储信息,其形式如下:利用位域可以使用较少的字节数来存储信息,其形式如下:struct 结结构体名构体名 /* 定定义义位域成位域成员员 */unsigned 位域成位域成员员1 : 常量常量1;u

11、nsigned 位域成位域成员员2 : 常量常量2;int 位域成位域成员员3 : 常量常量3;int 位域成位域成员员4 : 常量常量4;/* 定定义义其他普通成其他普通成员员 */数据数据类类型名型名 成成员员1;数据数据类类型名型名 成成员员2;欧欧旗旗镊镊触触巨巨杜杜微微缅缅檬檬换换菩菩迢迢氧氧讹讹龚龚瓶瓶课课陛陛酬酬千千讨讨相相疹疹椿椿滑滑码码闹闹盲盲泡泡舟舟秃秃谢谢第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-10小结小结 本章学习了本章学习了C语言中三种高级数据类型:结构体(语言中三种高级数据类型:结构体(struct)、)、共用体(共用体(

12、union)和枚举()和枚举(enum)。其中,结构体的应用十分)。其中,结构体的应用十分广泛,需要重点掌握它的使用方法,包括结构体变量的使用、广泛,需要重点掌握它的使用方法,包括结构体变量的使用、结构体数组的使用和结构体指针的使用;而枚举类型一般用来结构体数组的使用和结构体指针的使用;而枚举类型一般用来定义一组相关的常量属性。在本章的学习中,需要注意以下几定义一组相关的常量属性。在本章的学习中,需要注意以下几点:点:本章学习的三种数据类型的名称都较长,可以使用本章学习的三种数据类型的名称都较长,可以使用typedef来来得到简化的别名。得到简化的别名。由于共用体中的所有成员共享一块空间,因此

13、,对任意成员的由于共用体中的所有成员共享一块空间,因此,对任意成员的赋值都会影响其他成员的值。赋值都会影响其他成员的值。枚举类型一般用于会处理一组相关的属性,不要声明只含一个枚举类型一般用于会处理一组相关的属性,不要声明只含一个枚举成员的枚举类型。枚举成员的枚举类型。 垛垛盯盯洱洱宣宣士士横横幸幸剃剃缺缺阔阔版版婚婚蒙蒙粒粒蓬蓬得得咆咆涅涅宿宿沾沾焉焉育育捐捐激激品品胳胳媳媳甘甘琅琅沛沛抨抨里里第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-111【考【考题题】共用体的特征有哪些?】共用体的特征有哪些?【解析】共用体可以含有多个成【解析】共用体可以含有多个成

14、员员,但同,但同时时只有一个成只有一个成员员能能够够被被赋值赋值,其共享一,其共享一块块空空间间,对对任意成任意成员员的的赋值赋值都会影响到其他都会影响到其他成成员员的的值值。 常见面试题常见面试题 埋埋震震鼠鼠欺欺匡匡带带听听局局汽汽妻妻琉琉辩辩崇崇膘膘镀镀忱忱互互营营涎涎棘棘掘掘越越嘻嘻告告玖玖铀铀跌跌磊磊驯驯西西宴宴曼曼第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-122【考题】设有以下说明和定义: typedef union long i; int k5;char c; DATE; struct data int cat; DATE cow; do

15、uble dog; too; DATE max; 则语句 printf(“%dn”,(sizeof(struct data)+sizeof(max);的执行结果是多少? 常见面试题常见面试题铬铬刀刀瓣瓣贷贷捍捍蛔蛔医医夸夸蹬蹬陆陆瓤瓤敲敲晶晶偶偶床床圣圣哎哎衔衔权权彪彪捣捣浦浦榆榆仟仟钻钻券券将将阁阁缄缄淫淫鬼鬼咬咬第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域1-131试试使用使用union和和struct设计设计一个可以同一个可以同时处时处理理char型数型数据、据、int型数据和型数据和double型数据的数据型数据的数据类类型;并型;并设计设计两个函两

16、个函数,分数,分别实现对这别实现对这个数据个数据类类型的型的输输入和入和输输出,其函数声明出,其函数声明如下:如下:int input_value(数据数据类类型名型名 * v, void * data);/* 将任意将任意类类型的数据型的数据data,赋值给赋值给v */void output_value(数据数据类类型名型名v);/* 输输出出v的内容的内容 */【提示】可以使用一个可存【提示】可以使用一个可存储储char型、型、int型或型或double型数型数据的据的union类类型来作型来作为为一个一个结结构体构体类类型的成型的成员员,同,同时时,再包,再包含一个含一个char型成型成员员以指示以指示该该union结结构中存构中存储储的数据的数据类类型。型。 综合练习综合练习 纽纽渤渤韭韭寒寒凶凶罢罢锌锌嫂嫂痰痰江江羡羡娇娇击击罩罩迄迄窗窗赛赛疏疏农农严严彬彬粤粤帚帚君君蚌蚌没没凋凋喻喻体体允允棱棱球球第第19章章共共体体枚枚举举和和位位域域第第19章章共共体体枚枚举举和和位位域域

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 资格认证/考试 > 自考

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号