共同体与枚举类型课件

上传人:我*** 文档编号:143308952 上传时间:2020-08-28 格式:PPT 页数:25 大小:374.50KB
返回 下载 相关 举报
共同体与枚举类型课件_第1页
第1页 / 共25页
共同体与枚举类型课件_第2页
第2页 / 共25页
共同体与枚举类型课件_第3页
第3页 / 共25页
共同体与枚举类型课件_第4页
第4页 / 共25页
共同体与枚举类型课件_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《共同体与枚举类型课件》由会员分享,可在线阅读,更多相关《共同体与枚举类型课件(25页珍藏版)》请在金锄头文库上搜索。

1、10.1 共用体类型与共用体变量 10.2 共用体变量的引用 10.3 共用体变量的应用 10.4 位运算与位段结构 10.5 枚举类型 10.6 类型定义,第十章 共同体与枚举类型,蠢够灌兆烛彰挨韭粳艾问速详耗芯右溺渡侯诲僳咎纫程物祝粟赤邵盟涝无第10章共同体与枚举类型第10章共同体与枚举类型,10.1 共用体类型与共用体变量,在某些特殊应用中,有时需要将几种不同类型的变量存放到同一段内存单元中,即多个数据值覆盖存储,但在任意时刻只能存储其中的一种数据,而不能同时存放多种数据。这种使几个不同的变量共同占用一段内存单元的结构,称为“共用体”类型的结构。共用体也是由用户定义的数据类型。,1. 共

2、用体类型的定义 共用体类型定义用关键字union标识,一般形式为: union 标识符 成员说明列表 ;,禾艾颜宠萝垮护垛搞涂似岔喷贫生骏高烟叼忆旬捅痰阅交氯边恬看仟膀敌第10章共同体与枚举类型第10章共同体与枚举类型,例如,定义一个共用体类型union data , 包含一个整型成员,一个字符型成员和一个单精度实型成员: union dataint i;char ch;float f; ;,注意区分: “共用体”类型:各成员占相同的起始地址,在内存中 所占字节数等于最长的成员在内存中所占的字节数。 “结构体”类型:各成员占不同的地址,在内存中所占 字节数等于全部成员在内存中所占的字节数之和。

3、,沽内封颇选迷属唇驯勇名霸政谗洪厅岸章碳忿台牵繁沸郴诡族盎贱蚀赊处第10章共同体与枚举类型第10章共同体与枚举类型,2. 共用体变量的定义,三种形式:,例如: union data int i; char ch; float f; ; union data a,b,c;,union data int i; char ch; float f; a,b,c;,union int i; char ch; float f; a,b,c;,谎派昼钦状是尽鹃险悬捧锥篙辫三哎钟瓦砷屏蒜谚促跃酋括询排偶附田铡第10章共同体与枚举类型第10章共同体与枚举类型,10.2 共用体变量的引用,共用体变量不能直接使用,

4、只能使用里面的某个成员,其成员同样通过点运算描述。形式为: 共用体变量名.成员名,union data int i; char ch; float f; a;,例如:左边定义的共用体类型的变量a,a占有4个字节的内存空间,a.i 表示其整型成员,a.ch表示其字符型成员,a.f表示其单精度型成员。但在同一时刻只有一个成员有效。,纲溜恒耽巴伙驳篡湾蜂弃疙卓道聘神晤蒲锭斌纹裁意骄蹲讫实粮寇痒庆妈第10章共同体与枚举类型第10章共同体与枚举类型,说明: (1) 共用体变量中,可以包含若干个成员及若干种类型,但共用体成员不能同时使用。在每一时刻,只有一个成员起作用,不能同时引用多个成员。 (2) 共用

5、体变量中起作用的成员值是最后一次存放的成员值,因为共用体变量所有成员共同占用同一段内存单元,后来存放的值将原先存放的值覆盖,故只能使用最后一次给定的成员值。如:若有语句序列 a.i=27; a.ch=D; a.f=5.78; 不能企图通过下面的printf函数得到a.i和a.ch的值: printf(“%d,%c,%f”, a.i, a.ch, a.f); 只能得到a.f的值。,讶撤授逻私直茵战绊洱兽赣烤囱弓畸站攀醛手傣剂汉空擞娱赏潮赣伊铭猎第10章共同体与枚举类型第10章共同体与枚举类型,共用体变量的引用举例,main() e.b=e.a+20; e.x.c=e.a+e.b; e.x.d=e

6、.a*e.b; printf(%d,%dn,e.x.c,e.x.d); ,程序运行结果如下: 60,3600,union data int a,b; struct int c; int d; x; e=10;,陶转消蛹拜易旁哑捍开右墨噎剐窗惋特狭参区努揩剂蝎随栏廖当彬罐棠佛第10章共同体与枚举类型第10章共同体与枚举类型,10.3 共用体变量的应用,union task char cname10; /*所讲课程*/ int num; /*论文数目*/ ; ,例如:设有若干教师的数据,包含有教师编号、姓名、职 称,若职称为讲师,则描述他们的所讲课程,若职称为教 授,则描述他们所写论文数目。,st

7、ruct teachers int no; /*编号*/ char name12; /*姓名*/ char zc; /*职称*/ union task x; /*可变字段, 为所讲课程或论文数目*/ teach3;,啊拐枷锁蒂诣今滑罩砚挂酵孤供咕嘲描礁鳖钩尹龋瓤衙瑰厉存枷疏践贺祟第10章共同体与枚举类型第10章共同体与枚举类型,#define format “%d %s %c ” main( ) int i; for(i=0; i3; i+) scanf (format, else printf(data errorn); ,拟回膜唱架压咏吟膨蜒辕辩吗呛慕蘸浑孽狈殉删认豫敲悠狼捅彰视掂马洽第1

8、0章共同体与枚举类型第10章共同体与枚举类型,10.4 位运算,数的补码表示 用补码表示数时,正数的补码是它本身。负数的补码是最高位(用来表示符号,0表示正数,1表示负数,称为符号位)为1,其余各位(数值位)先按位取反(即0变为1,1变为0),再在最低位加1。 由补码求真值(即实际二进制数)时,若符号位为0,则补码就是真值。若符号为1,则真值为负数,真值的数值位为补码的数值位各位按位取反后再在最低位加1(若进位位超出数值位的位数,则丢弃)。,只荒天闰胳铬巳替勇癌炽抚咳舍沟思勾迈实填甚楷粕喇吼藐莲愿驳谆饿叁第10章共同体与枚举类型第10章共同体与枚举类型,a 2,左移,flag 0 xC4,按位

9、异或,b 3,右移,flag /*位段a,占两位*/ unsigned:6; /*无名位段,占6位,但不能访问*/ unsigned:0; /*无名位段,占0位,表示下一位段从下一字边界开始*/ unsigned b:10; /*位段b,占10位*/ int i; /*成员i,从下一字边界开始*/ data; data变量的内存分配示意图,沛遇绸法肌束呜仑惑滩迭龚淀贫先漏进亡校因汛就趴廖仓茅蘸痴庙魏畸霍第10章共同体与枚举类型第10章共同体与枚举类型,位段结构注意事项,一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元空间不够,则剩余空间不用,从下一个单元起存放该位段。 可

10、以通过定义长度为0的位段的方式使下一位段从下一存储单元开始。 可以定义无名位段。 位段的长度不能大于存储单元的长度。 位段无地址,不能对位段进行取地址运算。 位段可以以%d,%o,%x格式输出。 位段若出现在表达式中,将被系统自动转换成整数。 应用举例,智夜吟秤押廉车赘遂牲襟氧讼宪金籍毅某曙穷问非辐巧啥钨噪绩泣悄邓庚第10章共同体与枚举类型第10章共同体与枚举类型,#include stdio.h void main() int x,y; printf(n请输入十六进制整数:); scanf(%x, ,程序运行结果如下: 请输入16进制整数:2fe1 循环左移4个二进制位得:fe12,预饮挝借

11、墒氰等幸辑忻臀慷纶汲棍腐沼负抿酱哭绳悦臂蹭阶祁慈绍漠翻你第10章共同体与枚举类型第10章共同体与枚举类型,10.5 枚举类型,如果一个变量只有几种可能的值,可以将其定义为枚举类 型。“枚举”即将变量可能的值一一列举出来。变量的值只能 取列举出来的值之一。,枚举类型的定义 枚举类型定义用关键字 enum 标识,形式为: enum 枚举名 标识符1,标识符2 , ; 枚举元素(在定义枚举类型时花括号中的名字称为枚举元素或枚举常量,枚举常量是非一般意义上的常量,而只是一个符号),标识符代表什么含义,完全由程序员决定。各枚举元素的顺序决定了它们的值,从0开始,依次递增1。,佑锯碎栏赤便瞪喷敝助岿澜看历

12、袍匙智摹容两摔付畏吩奠蠢钢旺单嘉咎送第10章共同体与枚举类型第10章共同体与枚举类型,例如,定义枚举类型color,包含红、黄、蓝、白、黑五种颜色: enum color red, yellow, blue, white, black; 枚举类型enum color有red、 yellow、 blue、 white、 black五个枚举元素, 系统自动分别为它们赋值为0、 1、 2、 3、 4, 代表红、 黄、 蓝、 白、 黑五种颜色。,在定义枚举类型时,可在通过“=”号自己规定枚举元素的起始值,并影响后面的枚举元素的值,后继元素的值以第一个枚举元素的值依次递增1。 例如:enum statu

13、copy=6, delete; 则copy的值为6, delete的值为7,可通过printf函数输出。,翘弯砸蹬递毫瘫女瘪戌溺酒收抑践盏芥山锰少叔分黄裹谋卵生逐戳裁手渤第10章共同体与枚举类型第10章共同体与枚举类型,2. 枚举类型变量的定义,(1) 先定义枚举类型, 再定义枚举类型变量: enum 标识符 枚举数据表; enum 标识符 变量表; 例如, 对枚举类型enum color, 定义枚举变量c1、 c2: enum color red, yellow, blue, white, black; enum color c1, c2;,(2) 在定义枚举类型的同时定义枚举类型变量: e

14、num 标识符 枚举数据表 变量表; enum color red,yellow,blue,white,black c1, c2;,苔褒欧手傅抽烹垂锦伯们婆坞樊拦摘漱曳糠凉鹏蝗哟痪闺辫镊碳泌稿毖尔第10章共同体与枚举类型第10章共同体与枚举类型,说明: (1)枚举元素是常量,不是变量。在中按定义的顺序取值0、1、. 例:printf(%d,yellow); 输出整数1。 (2)枚举类型变量可以进行赋值运算。例:c1 = yellow; printf(%d, c1);输出整数1。 (3)枚举类型是有序类型,因此枚举类型数据还可以进行关系运算。枚举类型数据的比较转化成对序号进行比较, 只有同一种枚

15、举类型的数据才能进行比较。 如:if(c1=c2) printf(“n%s”,”The color is same”); if(c1=red) printf(“n%s”,”red”);,(3) 直接定义枚举类型变量: enum 枚举数据表 变量表; enum red, yellow, blue, white, black c1, c2;,稽吃镇药蚂荣串恼捏盂贡辱恢完般涪屠吊存磕争笺猾妨催汞扔酮纠郝川茬第10章共同体与枚举类型第10章共同体与枚举类型,void main() enum colornamered,yellow,blue,white,black; enum colorname col

16、or; for(color=red;colorblack;color+) switch(color) case red:printf(red);break; case yellow:printf(yellow);break; case blue:printf(blue);break; case white:printf(white);break; case black:printf(black);break; ,瀑谊鬃凌靡嘶阴掳科寺莽啦钎砰拢柜艺碘古较柑狮宜雇营咒裤盒粪氟赤惶第10章共同体与枚举类型第10章共同体与枚举类型,除了可以直接使用C提供的标准类型名(如int,char,float)和自己声明的结构体、共用体、指针、枚举类型外,还可以用typedef声明新的类型名来代替已有的类型名。如: (1)typedef int integer;/*简单的名字替换*/ 指定用in

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

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