第8章第三讲共用体和枚举类型.ppt
《第8章第三讲共用体和枚举类型.ppt》由会员分享,可在线阅读,更多相关《第8章第三讲共用体和枚举类型.ppt(31页珍藏版)》请在三一办公上搜索。
1、第8章 用户自定义数据类型 之 共用体和枚举类型,83 共用体 831 共用体的概念、类型说明和变量定义 1共用体的概念 程序设计有时需要在同一段内存中存取不同类型的变量,例如,在同一个地址开始的内存块中,分别存取整型变量、字符型变量、实型变量的值(如图813所示)。三种变量在内存中占有不同的字节数,但都从同一地址开始存放,它们的值可以相互覆盖。本节将介绍利用“共用体”类型来完成这样的操作。所谓共用体类型,就是几个不同类型的变量共占一段内存的结构。,第8章 用户自定义数据类型 之 共用体和枚举类型,2共用体类型的说明和变量定义 共用体类型说明和变量定义方式和结构体的方式完全相同。所不同的是,结
2、构体变量中的成员各自占有自己的存储空间,而共用体变量中的所有成员占有共同的存储空间。,第8章 用户自定义数据类型 之 共用体和枚举类型,例如:union u_type char ch;intm;float f;v;以上说明了一个共用体类型 u_type,同时还定义了一个该类型的共用体变量v。,第8章 用户自定义数据类型 之 共用体和枚举类型,共用体类型说明的一般形式为:union 共用体名 类型名1 共用体成员名1;类型名2 共用体成员名2;类型名n 共用体成员名n;共用体变量名表,第8章 用户自定义数据类型 之 共用体和枚举类型,说明:(1)其中union是C语言的关键字,用于说明共用体类型
3、。“共用体名”、“共用体成员名”以及“共用体变量名”都是由用户定义的标识符。(2)其中方括号内的内容可以省略,共用体变量的定义与结构体变量类似,可以在说明类型的同时定义变量;也可以先说明共用体类型,再用另一条语句定义共用体变量;还可以直接定义共用体变量,省略共用体名。,第8章 用户自定义数据类型 之 共用体和枚举类型,(3)共用体中的成员可以是简单变量,也可以是数组、指针、结构体和共用体(结构体的成员也可以是共用体),即共用体类型允许嵌套定义,例如:union u_tp struct unsigned char low,high;b;unsigned w;r;以上在共用体类型中,定义了一个结构
4、体成员b。本例中可以用r.b.low存取r.w的低字节的值,而用r.b.high存取rw的高字节的值。,第8章 用户自定义数据类型 之 共用体和枚举类型,也可以用rw一次存取双字节的值。又如:union u_tpl unsigned char c2;unsigned w;rl;本例共用体类型中,定义了一个数组成员c。可以用r1c0存取r1w低字 节的值,用r1cl存取r1w高字节的值。例如下列程序段:r1w0 x6141;/*0 x61是字母a的ASCII码,0 x41是字母A的ASCII码*/printf(”c,cn”,r1.c1,r1c0);输出结果是:a,A,第8章 用户自定义数据类型
5、之 共用体和枚举类型,(4)系统为所有共用体成员分配同一地址开始的存储空间,使用覆盖的方式共享存储单元。(5)共用体变量所占空间的大小取决于占存储空间最大的那个成员。例如上述例子中sizeof(u_type)或sizeof(v)的值均为4,因为成员ch、m、f中,f占4个字节的存储空间,是占存储空间最大的成员。(6)由于共用体变量中所有成员共享存储空间,因此变量中的所有成员的首地址相同,而且共用体变量的地址也就是该变量成员的地址。例如上述&r、&r.w、&r.b.low的值均相同。,第8章 用户自定义数据类型 之 共用体和枚举类型,3在定义共用体变量时赋初值 共用体变量在定义的同时只能对第一个
6、成员的值进行初始化。例如:union u_typel int i;float f;x123;以上在定义共用体变量x的同时给xi赋初值123。,第8章 用户自定义数据类型 之 共用体和枚举类型,832 共用体变量的使用 1共用体变量的使用 共用体变量中每个成员的使用方法与结构体完全相同,其一般格式为:共用体变量名成员名 例如,若有定义语句:union u_type char ch;int i;float f;v1,v2;,第8章 用户自定义数据类型 之 共用体和枚举类型,则下面均是合法的语句:v1f123;printf(“fn”,v1f);scanf(”c”,&v2ch);v1chv2ch+32
7、;printf(“cn”,v1ch);,第8章 用户自定义数据类型 之 共用体和枚举类型,说明:(1)可以像使用简单变量一样使用“共用体变量名成员名”。(2)对共用体某一成员赋值,会覆盖其他成员原来的数据,原来成员的值就不存在了,因此,共用体变量中起作用的是最后一次存人的成员变量的值。例如;v1ch=a;v1i0 x3f41;printf(”c,xn”,v1ch,v1i);以上程序段中,最后一次是给共用体中整型成员变量v1i赋十六进制数0 x3f41,低字节0 x41(即大写字母A的ASCII码)把前面的小写字母a的ASCII码0 x61覆盖了,因此输出结果为:A,3f41。,第8章 用户自定
8、义数据类型 之 共用体和枚举类型,2共用体变量的整体赋值 新的ANSIC标准允许在两个类型相同的共用体变量之间进行赋值操作。例如下面的程序段:v1i123;v2v1;printf(”dn”,v2i);输出结果为123。,第8章 用户自定义数据类型 之 共用体和枚举类型,3应用举例 例810某工厂的零件清单如图816所示。若零件是本厂生产的,则“零件来源”用车间代码(整型)表示;若零件不是本厂生产的,则“零件来源”用来源单位(字符数组)填写。要求输人、输出零件清单的数据(假设只有两个零件)。程序见课本。,第8章 用户自定义数据类型 之 共用体和枚举类型,84 枚举型 实际应用中,某些变量只有几种
9、可能的值,例如在模拟扑克牌的游戏中,扑克牌只有四种花色(梅花、方块、红桃、黑桃),可以把这种变量定义成枚举类型。枚举类型就是将变量的可取值一一列举出来,变量只能存取其中之一的值,存取其他值是错误的。,第8章 用户自定义数据类型 之 共用体和枚举类型,枚举类型说明和定义变量的形式为:enum 枚举类型名 枚举值1整型常数1),枚举值2整型常数2,枚举值n整型常数n枚举型变量名表例如:enum cardsclub,diamond,heart,spadecardl,card2;说明了一个enumcards枚举类型,同时定义了两个该类型的枚举型变量cardl与card2,它们的值只能取club、dia
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第三 共用 枚举 类型

链接地址:https://www.31ppt.com/p-5667131.html