共用体枚举和位域

共用体枚举和位域

ID:27306325

大小:216.51 KB

页数:13页

时间:2018-12-01

共用体枚举和位域_第1页
共用体枚举和位域_第2页
共用体枚举和位域_第3页
共用体枚举和位域_第4页
共用体枚举和位域_第5页
资源描述:

《共用体枚举和位域》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、第19章共用体、枚举和位域杨章伟e-mail:yang505412@163.com课程内容安排共用体枚举位域小结习题共用体继第18章介绍了结构体之后,本章将介绍另外三种高级数据类型:共用体、枚举和位域。这三种数据类型与结构体一样,都是多个数据单元结合而成的复杂数据单元,因此,它们可以用来描述更为复杂的数据形式。这三种数据类型的适用范围各有不同。共用体(union)是C语言中另一种高级数据结构,它可以使几个不同成员共享同一块内存。合理地使用共用体可以节省内存空间,还可以简化多种复杂数据的处理。声明共用体类型

2、在程序中,有时为了节约内存空间,可以使用共用体来使多个变量共享一块内存。共用体与结构体类似,可以含有多个成员,其声明形式如下:union共用体名{数据类型名成员名1;数据类型名成员名2;数据类型名成员名3;…};但与结构体结构不同的是,共用体的所有成员共享同一块内存,而结构体的每个成员都有自己的内存空间。一个共用体类型的字节长度为占用内存空间最多的成员变量的字节长度。定义共用体变量共有体变量的定义方法与结构体变量类似。可以先声明一个共用体类型,再使用该共用体类型来定义共用体变量;也可以直接定义共用体变量;

3、还可以使用typedef来定义一个共用体类型别名,再使用共有体别名来定义共有体变量。仅以第三种形式为例,如下所示。typedefunion_data_u_t{inta;charb;longlongc;}data_u_t;data_u_tv;枚举枚举类型是C语言中另一种高级类型。在前面已经学习了可以使用const常量和具名常量来代替程序中出现的常量数值,枚举类型也可以用来定义常量数值。声明枚举类型C语言使用枚举类型为这种情况下的常量替代提供了更好的解决方案。枚举类型是一组相关数据的集合,它可以在定义常量的同

4、时,将这些常量结合在一个集合中加强彼此的关系。枚举类型的声明与结构体和共用体的声明略有不同,其形式如下:enum枚举类型名{枚举成员1;枚举成员2;枚举成员3;…}其中的枚举成员都为int型,如果没有显式赋值,系统会自动将所有枚举成员从0开始赋值,而后面的枚举成员依次比前一个大1。位域在一些任务中,需要处理的信息都只需要占用一个或几个二进制位,这种情况下,如果使用一般的数据结构进行处理,会占用额外的空间,并增加多余的处理时间。这时,可以使用C语言中的另一种数据结构“位域”(或称为“位段”)来处理该数据。位

5、域属于结构体,它允许在结构体内以位为单位将其空间划分为多个区域,并将其分配给结构体的各个成员。在程序中可以通过操作位域的各个成员来操作其中的区域。位域的概念利用位域可以使用较少的字节数来存储信息,其形式如下:struct结构体名{/*定义位域成员*/unsigned位域成员1:常量1;unsigned位域成员2:常量2;int位域成员3:常量3;int位域成员4:常量4;…/*定义其他普通成员*/数据类型名成员1;数据类型名成员2;…};小结本章学习了C语言中三种高级数据类型:结构体(struct)、共用

6、体(union)和枚举(enum)。其中,结构体的应用十分广泛,需要重点掌握它的使用方法,包括结构体变量的使用、结构体数组的使用和结构体指针的使用;而枚举类型一般用来定义一组相关的常量属性。在本章的学习中,需要注意以下几点:本章学习的三种数据类型的名称都较长,可以使用typedef来得到简化的别名。由于共用体中的所有成员共享一块空间,因此,对任意成员的赋值都会影响其他成员的值。枚举类型一般用于会处理一组相关的属性,不要声明只含一个枚举成员的枚举类型。1.【考题】共用体的特征有哪些?【解析】共用体可以含有多

7、个成员,但同时只有一个成员能够被赋值,其共享一块空间,对任意成员的赋值都会影响到其他成员的值。常见面试题2.【考题】设有以下说明和定义:typedefunion{longi;intk[5];charc;}DATE;structdata{intcat;DATEcow;doubledog;}too;DATEmax;则语句printf(“%d”,(sizeof(structdata)+sizeof(max)));的执行结果是多少?常见面试题1.试使用union和struct设计一个可以同时处理char型数据

8、、int型数据和double型数据的数据类型;并设计两个函数,分别实现对这个数据类型的输入和输出,其函数声明如下:intinput_value(数据类型名*v,void*data);/*将任意类型的数据data,赋值给v*/voidoutput_value(数据类型名v);/*输出v的内容*/【提示】可以使用一个可存储char型、int型或double型数据的union类型来作为一个结构体类型的成员,同时,再包含一个char型

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。