欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第8章第三讲共用体和枚举类型.ppt

    • 资源ID:5667131       资源大小:138.51KB        全文页数:31页
    • 资源格式: PPT        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第8章第三讲共用体和枚举类型.ppt

    第8章 用户自定义数据类型 之 共用体和枚举类型,83 共用体 831 共用体的概念、类型说明和变量定义 1共用体的概念 程序设计有时需要在同一段内存中存取不同类型的变量,例如,在同一个地址开始的内存块中,分别存取整型变量、字符型变量、实型变量的值(如图813所示)。三种变量在内存中占有不同的字节数,但都从同一地址开始存放,它们的值可以相互覆盖。本节将介绍利用“共用体”类型来完成这样的操作。所谓共用体类型,就是几个不同类型的变量共占一段内存的结构。,第8章 用户自定义数据类型 之 共用体和枚举类型,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语言的关键字,用于说明共用体类型。“共用体名”、“共用体成员名”以及“共用体变量名”都是由用户定义的标识符。(2)其中方括号内的内容可以省略,共用体变量的定义与结构体变量类似,可以在说明类型的同时定义变量;也可以先说明共用体类型,再用另一条语句定义共用体变量;还可以直接定义共用体变量,省略共用体名。,第8章 用户自定义数据类型 之 共用体和枚举类型,(3)共用体中的成员可以是简单变量,也可以是数组、指针、结构体和共用体(结构体的成员也可以是共用体),即共用体类型允许嵌套定义,例如:union u_tp struct unsigned char low,high;b;unsigned w;r;以上在共用体类型中,定义了一个结构体成员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章 用户自定义数据类型 之 共用体和枚举类型,(4)系统为所有共用体成员分配同一地址开始的存储空间,使用覆盖的方式共享存储单元。(5)共用体变量所占空间的大小取决于占存储空间最大的那个成员。例如上述例子中sizeof(u_type)或sizeof(v)的值均为4,因为成员ch、m、f中,f占4个字节的存储空间,是占存储空间最大的成员。(6)由于共用体变量中所有成员共享存储空间,因此变量中的所有成员的首地址相同,而且共用体变量的地址也就是该变量成员的地址。例如上述&r、&r.w、&r.b.low的值均相同。,第8章 用户自定义数据类型 之 共用体和枚举类型,3在定义共用体变量时赋初值 共用体变量在定义的同时只能对第一个成员的值进行初始化。例如: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;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章 用户自定义数据类型 之 共用体和枚举类型,2共用体变量的整体赋值 新的ANSIC标准允许在两个类型相同的共用体变量之间进行赋值操作。例如下面的程序段:v1i123;v2v1;printf(”dn”,v2i);输出结果为123。,第8章 用户自定义数据类型 之 共用体和枚举类型,3应用举例 例810某工厂的零件清单如图816所示。若零件是本厂生产的,则“零件来源”用车间代码(整型)表示;若零件不是本厂生产的,则“零件来源”用来源单位(字符数组)填写。要求输人、输出零件清单的数据(假设只有两个零件)。程序见课本。,第8章 用户自定义数据类型 之 共用体和枚举类型,84 枚举型 实际应用中,某些变量只有几种可能的值,例如在模拟扑克牌的游戏中,扑克牌只有四种花色(梅花、方块、红桃、黑桃),可以把这种变量定义成枚举类型。枚举类型就是将变量的可取值一一列举出来,变量只能存取其中之一的值,存取其他值是错误的。,第8章 用户自定义数据类型 之 共用体和枚举类型,枚举类型说明和定义变量的形式为:enum 枚举类型名 枚举值1整型常数1),枚举值2整型常数2,枚举值n整型常数n枚举型变量名表例如:enum cardsclub,diamond,heart,spadecardl,card2;说明了一个enumcards枚举类型,同时定义了两个该类型的枚举型变量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 operatorplus,minus,times,divide;*说明枚举类型*enum weekday workday,week_end;*用已定义好的枚举类型定义枚举型变量*,第8章 用户自定义数据类型 之 共用体和枚举类型,2枚举类型的说明和变量定义有两种方式(如上),第一种方式把定义和说明分开;第二种方式在说明枚举类型的同时定义枚举变量。3枚举类型名和枚举值均为用户定义的标识符。枚举值又称为枚举元素或枚举常量,系统将枚举值作为整型常量来处理。因为是常量,因此不能在程序执行时赋值,也不能与其他标识符同名。若定义了上述几种枚举类型,以下语句均是非法的:int red;Mon1;minus2;,第8章 用户自定义数据类型 之 共用体和枚举类型,4方括号内的内容可以省略,如果省略“:整型常量”,编译程序按顺序给每个枚举元素一个对应的整数值,整数值从0开始,后续元素顺序加1。例如上面的例子中,Mon的值为0,Tue的值为1,Sun的值为6。可以在定义时指定枚举元素对应的整数值,没有指定整数值的元素则在前一元素序号值的基础上顺序加1。例如:enum weekdaySun7,Mon1,Tue,Wed,Thu,Fri,Sat;此时Sun的值为7,Mon的值为1,Tue的值为2,Sat的值为6。指定枚举元素对应的值可以是负的整数,以后的枚举元素值仍依次加1。例如:enum operator plus,minus=-3,times,divide;则plus的值为0,minus的值为一3,times的值为一2,divide的值为一1。,第8章 用户自定义数据类型 之 共用体和枚举类型,5每个枚举元素之间用逗号“,”隔开,而不是用分号“;”隔开。6枚举变量只能取枚举类型说明结构中的某个枚举元素,若要对枚举型赋整数值必须进行强制类型转换。例如:enum weekday Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat workday,week_end;workdayMon;week_ end(enum weekday)(6);*相当于week_ endSat;*7枚举变量可以进行加(减)一个整数n的运算。例如:workdayMon;workday+;*此时workday的值变成Tue*8枚举变量的值可以按其对应的整数值进行关系比较运算。例如:if(workdayMon)while(workdaySat),第8章 用户自定义数据类型 之 共用体和枚举类型,9枚举变量的值可以按其对应的整数输出整数值。例如:enum weekdaySun7,Mon1,Tue,Wed,Thu,Fri,Satwd;for(wdMon;wd=Sun;wd+)printf(”d,”,wd);上述程序段输出结果是:1,2,3,4,5,6,7,。85 typedef的用途 C语言中,除了可以使用数组、结构体、共用体和枚举型等构造类型之外,还可以使用关键字typedef对已有的类型说明一个新名称。用typedef说明一种新类型名的形式为:typedef类型名新类型名;上述只说明了一个数据类型的新名字,而不是产生了一种新的数据类型,原有类型名依然有效。,第8章 用户自定义数据类型 之 共用体和枚举类型,“类型名”是在此语句之前已经定义了的类型标识符。“新类型名”是一个用户定义标识符,是新的类型名。例如:typedef float REAL;使用上述说明后,把标识符REAL说明成了一个float类型的类型名,REAL就成了float 的代名词。此后,可用标识符REAL来定义单精度实型变量。例如:REALx,y;*等价于floatx,y;*习惯上将新的类型名用大写字母表示,以便与系统提供的关键字或预处理标识符区别开。,第8章 用户自定义数据类型 之 共用体和枚举类型,typedef可用来说明数组、结构体、共用体以及枚举型等类型名。下面举例说明。1typedef用于定义数组类型名 typedefintARRAY10;*说明ARRAY为有10个元素的整型数组类型名*ARRAYa,b;*定义a与b为整型数组变量,数组变量a与b各有10个元素*,第8章 用户自定义数据类型 之 共用体和枚举类型,2typedef用于定义结构体类型名 typedef struct charnumber10;charname10;floatscore5;STUDENT;*说明STUDENT为一个结构体类型名*STUDENTstu;*定义stu为上述结构体类型的变量。*,第8章 用户自定义数据类型 之 共用体和枚举类型,3typedef用于定义共用体类型名 typedef union int i;char Ch;UTYPE;*说明UTYPE为一个共用体类型名。*UTYPE x,y;*定义x与y为上述共用体类型的变量*,第8章 用户自定义数据类型 之 共用体和枚举类型,4typedef用于定义枚举类型名 typedefenummale,femaleETYPE;*说明ETYPE为一个枚举类型名*ETYPEsex;*定义sex为上述枚举类型的变量*,第8章 用户自定义数据类型 之 共用体和枚举类型,说明:(1)综上所述,可用如下3个步骤说明一个新类型名,步骤定义变量:先定义一个变量(如:int al0);将变量名换成新类型名(如:int ARRAY10);在最左边加上 typedef(如:typedef int ARRAY10;),新类型名定义完成;利用新类型名定义变量(如:ARRAY a,b;)。,第8章 用户自定义数据类型 之 共用体和枚举类型,(2)用typedef说明的是类型名,typedef不能用于定义变量。,第8章 用户自定义数据类型 指针与共用体,861 指向共用体变量的指针变量 指针变量可以指向一个共用体变量,此时可用下述三种方式之一存取共用体成员(三种方式是等价的):1共用体变量名共用体成员名 2指针变量名一共用体成员名 3(*指针变量名)共用体成员名 例818通过指针变量存取共用体成员数据。main()struct byte_tp unsigned char a1,ah;,第8章 用户自定义数据类型 指针与共用体,union reg_tp unsigned ax;struct byte_tp h;union reg_tp a,*p;p&a;aax0 x3b5e;printf(”axx,alx,ahxn”,p-ax,(*p).h.al,p-h.ah);p-h.a1-3;p-h.ah&=0 x0f;printf(”ax=x,a1=x,ahxn”,p-ax,(*p).h.al,p-h.ah);,运行结果:ax3b5e,a15e,ah3b axb5b,a15b,ahb,第8章 用户自定义数据类型 指针与共用体,上例说明了一个reg_tp共用体类型,以及定义相应的共用体变量a和指针变量p,变量a占内存两个字节,可使用ahah对它的高字节操作,使用aha1对它的低字节操作,使用aax对高、低两字节同时操作,这类似于“字存取”及“字节存取”CPU寄存器上的数据,如图821 所示。当指针变量p指向共用体变量a时,有下述等价表示关系。,图821共用体reg_tp类型,

    注意事项

    本文(第8章第三讲共用体和枚举类型.ppt)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开