第10章共同体与枚举类型.ppt

上传人:sccc 文档编号:5638083 上传时间:2023-08-04 格式:PPT 页数:25 大小:415.51KB
返回 下载 相关 举报
第10章共同体与枚举类型.ppt_第1页
第1页 / 共25页
第10章共同体与枚举类型.ppt_第2页
第2页 / 共25页
第10章共同体与枚举类型.ppt_第3页
第3页 / 共25页
第10章共同体与枚举类型.ppt_第4页
第4页 / 共25页
第10章共同体与枚举类型.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《第10章共同体与枚举类型.ppt》由会员分享,可在线阅读,更多相关《第10章共同体与枚举类型.ppt(25页珍藏版)》请在三一办公上搜索。

1、10.1 共用体类型与共用体变量10.2 共用体变量的引用10.3 共用体变量的应用10.4 位运算与位段结构10.5 枚举类型10.6 类型定义,第十章 共同体与枚举类型,10.1 共用体类型与共用体变量,在某些特殊应用中,有时需要将几种不同类型的变量存放到同一段内存单元中,即多个数据值覆盖存储,但在任意时刻只能存储其中的一种数据,而不能同时存放多种数据。这种使几个不同的变量共同占用一段内存单元的结构,称为“共用体”类型的结构。共用体也是由用户定义的数据类型。,1.共用体类型的定义共用体类型定义用关键字union标识,一般形式为:union 标识符 成员说明列表;,例如,定义一个共用体类型u

2、nion data,包含一个整型成员,一个字符型成员和一个单精度实型成员:union dataint i;char ch;float f;;,注意区分:“共用体”类型:各成员占相同的起始地址,在内存中所占字节数等于最长的成员在内存中所占的字节数。“结构体”类型:各成员占不同的地址,在内存中所占字节数等于全部成员在内存中所占的字节数之和。,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

3、;float f;a,b,c;,10.2 共用体变量的引用,共用体变量不能直接使用,只能使用里面的某个成员,其成员同样通过点运算描述。形式为:共用体变量名.成员名,union data int i;char ch;float f;a;,例如:左边定义的共用体类型的变量a,a占有4个字节的内存空间,a.i 表示其整型成员,a.ch表示其字符型成员,a.f表示其单精度型成员。但在同一时刻只有一个成员有效。,说明:(1)共用体变量中,可以包含若干个成员及若干种类型,但共用体成员不能同时使用。在每一时刻,只有一个成员起作用,不能同时引用多个成员。(2)共用体变量中起作用的成员值是最后一次存放的成员值,

4、因为共用体变量所有成员共同占用同一段内存单元,后来存放的值将原先存放的值覆盖,故只能使用最后一次给定的成员值。如:若有语句序列 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的值。,共用体变量的引用举例,main()e.b=e.a+20;e.x.c=e.a+e.b;e.x.d=e.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

5、;e=10;,10.3 共用体变量的应用,union task char cname10;/*所讲课程*/int num;/*论文数目*/;,例如:设有若干教师的数据,包含有教师编号、姓名、职称,若职称为讲师,则描述他们的所讲课程,若职称为教授,则描述他们所写论文数目。,struct teachers int no;/*编号*/char name12;/*姓名*/char zc;/*职称*/union task x;/*可变字段,为所讲课程或论文数目*/teach3;,#define format“%d%s%c”main()int i;for(i=0;i3;i+)scanf(format,el

6、se printf(data errorn);,10.4 位运算,数的补码表示用补码表示数时,正数的补码是它本身。负数的补码是最高位(用来表示符号,0表示正数,1表示负数,称为符号位)为1,其余各位(数值位)先按位取反(即0变为1,1变为0),再在最低位加1。由补码求真值(即实际二进制数)时,若符号位为0,则补码就是真值。若符号为1,则真值为负数,真值的数值位为补码的数值位各位按位取反后再在最低位加1(若进位位超出数值位的位数,则丢弃)。,a 2,左移,flag 0 xC4,按位异或,b 3,右移,flag&0 x37,按位与,&,(关系运算符),(低),flag|0 x5A,按位或,|,(高

7、),flag,按位取反,(算术运算符),举例,(赋值运算符),优先级,名称,位运算符,位段结构,位段结构中位段的定义格式为:unsigned 成员名:二进制位数 struct bytedata unsigned a:2;/*位段a,占两位*/unsigned:6;/*无名位段,占6位,但不能访问*/unsigned:0;/*无名位段,占0位,表示下一位段从下一字边界开始*/unsigned b:10;/*位段b,占10位*/int i;/*成员i,从下一字边界开始*/data;data变量的内存分配示意图,位段结构注意事项,一个位段必须存储在同一存储单元(即字)之中,不能跨两个单元。如果其单元

8、空间不够,则剩余空间不用,从下一个单元起存放该位段。可以通过定义长度为0的位段的方式使下一位段从下一存储单元开始。可以定义无名位段。位段的长度不能大于存储单元的长度。位段无地址,不能对位段进行取地址运算。位段可以以%d,%o,%x格式输出。位段若出现在表达式中,将被系统自动转换成整数。应用举例,#include stdio.hvoid main()int x,y;printf(n请输入十六进制整数:);scanf(%x,,程序运行结果如下:请输入16进制整数:2fe1循环左移4个二进制位得:fe12,10.5 枚举类型,如果一个变量只有几种可能的值,可以将其定义为枚举类型。“枚举”即将变量可能

9、的值一一列举出来。变量的值只能取列举出来的值之一。,枚举类型的定义 枚举类型定义用关键字 enum 标识,形式为:enum 枚举名 标识符1,标识符2,;枚举元素(在定义枚举类型时花括号中的名字称为枚举元素或枚举常量,枚举常量是非一般意义上的常量,而只是一个符号),标识符代表什么含义,完全由程序员决定。各枚举元素的顺序决定了它们的值,从0开始,依次递增1。,例如,定义枚举类型color,包含红、黄、蓝、白、黑五种颜色:enum color red,yellow,blue,white,black;枚举类型enum color有red、yellow、blue、white、black五个枚举元素,系

10、统自动分别为它们赋值为0、1、2、3、4,代表红、黄、蓝、白、黑五种颜色。,在定义枚举类型时,可在通过“=”号自己规定枚举元素的起始值,并影响后面的枚举元素的值,后继元素的值以第一个枚举元素的值依次递增1。例如:enum statucopy=6,delete;则copy的值为6,delete的值为7,可通过printf函数输出。,2.枚举类型变量的定义,(1)先定义枚举类型,再定义枚举类型变量:enum 标识符 枚举数据表;enum 标识符 变量表;例如,对枚举类型enum color,定义枚举变量c1、c2:enum color red,yellow,blue,white,black;enu

11、m color c1,c2;,(2)在定义枚举类型的同时定义枚举类型变量:enum 标识符 枚举数据表 变量表;enum color red,yellow,blue,white,black c1,c2;,说明:(1)枚举元素是常量,不是变量。在中按定义的顺序取值0、1、.例:printf(%d,yellow);输出整数1。(2)枚举类型变量可以进行赋值运算。例:c1=yellow;printf(%d,c1);输出整数1。(3)枚举类型是有序类型,因此枚举类型数据还可以进行关系运算。枚举类型数据的比较转化成对序号进行比较,只有同一种枚举类型的数据才能进行比较。如:if(c1=c2)printf(

12、“n%s”,”The color is same”);if(c1=red)printf(“n%s”,”red”);,(3)直接定义枚举类型变量:enum 枚举数据表 变量表;enum red,yellow,blue,white,black c1,c2;,void main()enum colornamered,yellow,blue,white,black;enum colorname color;for(color=red;colorblack;color+)switch(color)case red:printf(red);break;case yellow:printf(yellow);

13、break;case blue:printf(blue);break;case white:printf(white);break;case black:printf(black);break;,除了可以直接使用C提供的标准类型名(如int,char,float)和自己声明的结构体、共用体、指针、枚举类型外,还可以用typedef声明新的类型名来代替已有的类型名。如:(1)typedef int integer;/*简单的名字替换*/指定用integer代替int类型,这样,integer j,k;等价于 int j,k;(2)typedef int arr5;/*定义数组类型*/指定用arr

14、代替一个包含5个整数的整型数组,这样,arr a,b;等价于 int a5,b5;,10.6 类型定义,(3)定义指针类型 typedef char*STRING;STRING p1,p2,p10;p1 p2 为字符型指针变量,p为字符型指针数组,指定用node代替上述结构体类型struct node,用link代替结构体指针类型,这样 node stu1,stu2;等价于 struct node stu1,stu2;link p,q;等价于 struct node*p,*q;或 node*p,*q;,(4)typedef struct node long num;char name10;st

15、ruct node*next;node,*link;,归纳起来,声明一个新的类型名的方法是先按定义变量的方法写出定义体(如:int j;)。将变量名换成新类型名(如:将j换成integer)。在最前面加typedef(如:typedef int integer;)。然后可以用新类型名去定义变量。再以定义上述的数组类型为例来说明:先按定义数组变量形式书写:int a10;将变量名a换成自己指定的类型名:int arr10;在前面加上typedef,得到typedef int arr10;用来定义变量:arr a;,关于typedef的说明:用typedef可以声明各种类型名,但不能用来定义变量。用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。typedef与#define有相似之处,如:typedef int integer;#define integer int 两者的作用都是用integer 代表int。,本章结束,再见!,同学们:,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号