共同体与枚举类型.ppt





《共同体与枚举类型.ppt》由会员分享,可在线阅读,更多相关《共同体与枚举类型.ppt(25页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、10.1共用体类型与共用体变量共用体类型与共用体变量10.2共用体变量的引用共用体变量的引用10.3共用体变量的应用共用体变量的应用10.4位运算与位段结构位运算与位段结构10.5枚举类型枚举类型10.6类型定义类型定义第十章第十章 共同体与枚举类型共同体与枚举类型C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页10.1 10.1 共用体类型与共用体变量共用体类型与共用体变量 在某些特殊应用中,有时需要将几种不同类型的变量存放到在某些特殊应用中,有时需要将几种不同类型的变量存放到同一段内存单元中同一
2、段内存单元中,即多个数据值覆盖存储,但在任意时刻只能存即多个数据值覆盖存储,但在任意时刻只能存储其中的一种数据,而不能同时存放多种数据。储其中的一种数据,而不能同时存放多种数据。这种使几个不同这种使几个不同的变量共同占用一段内存单元的结构,称为的变量共同占用一段内存单元的结构,称为“共用体共用体”类型的结类型的结构构。共用体也是由用户定义的数据类型。共用体也是由用户定义的数据类型。1.共用体类型的定义共用体类型的定义共用体类型定义用关键字共用体类型定义用关键字union标识,一般形式为:标识,一般形式为:union标识符标识符成员说明列表成员说明列表;C C语言程序设计语言程序设计C C语言程
3、序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页例如,定义一个共用体类型例如,定义一个共用体类型uniondata,包含一个整型成员,包含一个整型成员,一个字符型成员和一个单精度实型成员:一个字符型成员和一个单精度实型成员:uniondatainti;charch;floatf;;注意区分:注意区分:“共用体共用体”类型:类型:各成员占各成员占相同的相同的起始地址,在内存中起始地址,在内存中所占字节数等于所占字节数等于最长的最长的成员在内存中所占的成员在内存中所占的字节数字节数。“结构体结构体”类型:类型:各成员占各成员占不同的不同的地址,
4、在内存中所占地址,在内存中所占字节数等于全部成员在内存中所占的字节数等于全部成员在内存中所占的字节数之和字节数之和。C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页2.共用体变量的定义,三种形式:共用体变量的定义,三种形式:例如:例如:uniondatainti;charch;floatf;uniondataa,b,c;uniondatainti;charch;floatf;a,b,c;unioninti;charch;floatf;a,b,c;C C语言程序设计语言程序设计C C语言程序设计语言程
5、序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页10.2 10.2 共用体变量的引用共用体变量的引用 共共用用体体变变量量不不能能直直接接使使用用,只只能能使使用用里里面面的的某某个个成成员员,其成员同样通过其成员同样通过点运算点运算描述。形式为:描述。形式为:共用体变量名共用体变量名.成员名成员名 union dataunion data int i;int i;char ch;char ch;float f;float f;a;a;例如:左边定义的共用体类型的例如:左边定义的共用体类型的变量变量a,a占有占有4个字节的内存空间,个字节的内存空间,a
6、.i表示其整型成员,表示其整型成员,a.ch表示其表示其字符型成员,字符型成员,a.f表示其单精度型表示其单精度型成员。但在同一时刻只有一个成成员。但在同一时刻只有一个成员有效。员有效。C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页说明:说明:(1)共共用用体体变变量量中中,可可以以包包含含若若干干个个成成员员及及若若干干种种类类型型,但但共共用用体体成成员员不不能能同同时时使使用用。在在每每一一时时刻刻,只只有有一一个个成成员员起起作用,不能同时引用多个成员。作用,不能同时引用多个成员。(2)共
7、共用用体体变变量量中中起起作作用用的的成成员员值值是是最最后后一一次次存存放放的的成成员员值值,因因为为共共用用体体变变量量所所有有成成员员共共同同占占用用同同一一段段内内存存单单元元,后后来来存存放放的的值值将将原原先先存存放放的的值值覆覆盖盖,故故只只能能使使用用最最后后一一次次给给定定的成员值。如:若有语句序列的成员值。如:若有语句序列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的值。的值。C C语言程序设计
8、语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页共用体变量的引用举例共用体变量的引用举例main()e.b=e.a+20;=e.a+e.b;=e.a*e.b;printf(%d,%);程序运行结果如下:程序运行结果如下:60,3600uniondatainta,b;structintc;intd;x;e=10;C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页10.3 共用体变量的应用共用体变量的应用uniontaskcha
9、rcname10;/*所讲课程所讲课程*/intnum;/*论文数目论文数目*/;例如:设有若干教师的数据,包含有教师编号、姓名、职例如:设有若干教师的数据,包含有教师编号、姓名、职称,若职称为讲师,则描述他们的所讲课程,若职称为教称,若职称为讲师,则描述他们的所讲课程,若职称为教授,则描述他们所写论文数目。授,则描述他们所写论文数目。structteachersintno;/*编号编号*/charname12;/*姓名姓名*/charzc;/*职称职称*/uniontaskx;/*可变字段,可变字段,为所讲课程或论文数目为所讲课程或论文数目*/teach3;C C语言程序设计语言程序设计C
10、C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页#defineformat“%d%s%c”main()inti;for(i=0;i3;i+)scanf(format,&teachi.no,teachi.name,&teachi.zc);if(teachi.zc=L)scanf(”%s”,ame);elseif(teachi.zc=P)scanf(”%d”,&teachi.x.num);elseprintf(”inputdataerrorn”);exit(0);for(i=0;i3;i+)printf(format,teachi.no
11、,teachi.name,teachi.zc);if(teachi.zc=L)printf(”%sn”,ame););elseif(teachi.zc=P)printf(%dn,teachi.x.num);elseprintf(dataerrorn);C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页10.4位运算位运算数的补码表示数的补码表示用补码表示数时,正数的补码是它本身。负数的补用补码表示数时,正数的补码是它本身。负数的补码是最高位(用来表示符号,码是最高位(用来表示符号,0表示正数,表示正数
12、,1表示负表示负数,称为符号位)为数,称为符号位)为1,其余各位(数值位)先按,其余各位(数值位)先按位取反(即位取反(即0变为变为1,1变为变为0),再在),再在最低位最低位加加1。由补码求真值(即实际二进制数)时,若符号位为由补码求真值(即实际二进制数)时,若符号位为0,则补码就是真值。若符号为,则补码就是真值。若符号为1,则真值为负数,则真值为负数,真值的数值位为补码的数值位各位按位取反后再在真值的数值位为补码的数值位各位按位取反后再在最低位加最低位加1(若进位位超出数值位的位数,则丢弃)(若进位位超出数值位的位数,则丢弃)。C C语言程序设计语言程序设计C C语言程序设计语言程序设计C
13、 C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页a 2左移 3右移flag&0 x37按位与&(关系运算符)(低)flag|0 x5A按位或|(高)flag按位取反(算术运算符)举例(赋值运算符)优先级名称位运算符C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页位段结构位段结构位段结构中位段的定义格式为:unsigned 成员名:二进制位数 struct bytedata unsigned a:2;/*位段a,占两位*/unsigned:6;/*无名位段,占6位,但
14、不能访问*/unsigned:0;/*无名位段,占0位,表示下一位段 从下一字边界开始*/unsigned b:10;/*位段b,占10位*/int i;/*成员i,从下一字边界开始*/data;data变量的内存分配示意图C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计C C语言程序设计语言程序设计上一页上一页下一页下一页位段结构注意事项位段结构注意事项一个位段必须存储在同一存储单元(即字)之中,一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元空间不够,则剩余空不能跨两个单元。如果其单元空间不够,则剩余空间不用,从下一个单元起存
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 共同体 枚举 类型

限制150内