第8章第三讲共用体和枚举类型.ppt
《第8章第三讲共用体和枚举类型.ppt》由会员分享,可在线阅读,更多相关《第8章第三讲共用体和枚举类型.ppt(31页珍藏版)》请在三一文库上搜索。
1、第8章 用户自定义数据类型 之 共用体和枚举类型,83 共用体 831 共用体的概念、类型说明和变量定义 1共用体的概念 程序设计有时需要在同一段内存中存取不同类型的变量,例如,在同一个地址开始的内存块中,分别存取整型变量、字符型变量、实型变量的值(如图813所示)。三种变量在内存中占有不同的字节数,但都从同一地址开始存放,它们的值可以相互覆盖。本节将介绍利用“共用体”类型来完成这样的操作。 所谓共用体类型,就是几个不同类型的变量共占一段内存的结构。,第8章 用户自定义数据类型 之 共用体和枚举类型,2共用体类型的说明和变量定义 共用体类型说明和变量定义方式和结构体的方式完全相同。所不同的是,
2、结构体变量中的成员各自占有自己的存储空间,而共用体变量中的所有成员占有共同的存储空间。,第8章 用户自定义数据类型 之 共用体和枚举类型,例如: union u_type char ch; int m; 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高字节的值。例如下列程序段: r1w0x6141; /*0x61是字母a的ASCII码,0x41是字母A的ASCII码*/ printf(”c,cn”,r1.c1,r1c0);
5、输出结果是:a,A,第8章 用户自定义数据类型 之 共用体和枚举类型,(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(
7、“fn”,v1f); scanf(”c”,&v2ch); v1chv2ch+32; printf(“cn”,v1ch);,第8章 用户自定义数据类型 之 共用体和枚举类型,说明: (1)可以像使用简单变量一样使用“共用体变量名成员名”。 (2)对共用体某一成员赋值,会覆盖其他成员原来的数据,原来成员的值就不存在了,因此,共用体变量中起作用的是最后一次存人的成员变量的值。例如; v1ch=a; v1i0x3f41; printf(”c,xn”,v1ch,v1i); 以上程序段中,最后一次是给共用体中整型成员变量v1i赋十六进制数0x3f41,低字节0x41(即大写字母A的ASCII码)把前面的小
8、写字母a的ASCII码0x61覆盖了,因此输出结果为:A,3f41。,第8章 用户自定义数据类型 之 共用体和枚举类型,2共用体变量的整体赋值 新的ANSIC标准允许在两个类型相同的共用体变量之间进行赋值操作。例如下面的程 序段: v1i123; v2v1; printf(”dn”,v2i); 输出结果为123。,第8章 用户自定义数据类型 之 共用体和枚举类型,3应用举例 例810某工厂的零件清单如图816所示。若零件是本厂生产的,则“零件来源”用车间代码(整型)表示;若零件不是本厂生产的,则“零件来源”用来源单位(字符数组)填写。要求输人、输出零件清单的数据(假设只有两个零件)。程序见课本
9、。,第8章 用户自定义数据类型 之 共用体和枚举类型,84 枚举型 实际应用中,某些变量只有几种可能的值,例如在模拟扑克牌的游戏中,扑克牌只有四种花色(梅花、方块、红桃、黑桃),可以把这种变量定义成枚举类型。枚举类型就是将变量的可取值一一列举出来,变量只能存取其中之一的值,存取其他值是错误的。,第8章 用户自定义数据类型 之 共用体和枚举类型,枚举类型说明和定义变量的形式为: enum 枚举类型名 枚举值1整型常数1),枚举值2整型常数2, ,枚举值n整型常数n枚举型变量名表 例如: enum cardsclub,diamond,heart,spadecardl,card2; 说明了一个enu
10、mcards枚举类型,同时定义了两个该类型的枚举型变量cardl与card2,它们的值只能取club、diamond、heart、spade之一。 例如:cardlclub;、card2spade;都是合法的赋值语句。,第8章 用户自定义数据类型 之 共用体和枚举类型,说明: 1enum是C语言的关键字,是枚举类型的引导字,用于说明枚举类型以及定义枚举变量,例如: enum weekdayMon,Tue,Wed,Thu,Fri,Sat,Sun;*说明枚举类型* enum colorsred,green,bluebkcolor,tecolor;*说明枚举类型的同时定义枚举型变量* enum op
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 三讲 共用 枚举 类型
链接地址:https://www.31doc.com/p-3435658.html