c语言共用体与枚举概要

上传人:今*** 文档编号:107185046 上传时间:2019-10-18 格式:PPT 页数:20 大小:244.50KB
返回 下载 相关 举报
c语言共用体与枚举概要_第1页
第1页 / 共20页
c语言共用体与枚举概要_第2页
第2页 / 共20页
c语言共用体与枚举概要_第3页
第3页 / 共20页
c语言共用体与枚举概要_第4页
第4页 / 共20页
c语言共用体与枚举概要_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《c语言共用体与枚举概要》由会员分享,可在线阅读,更多相关《c语言共用体与枚举概要(20页珍藏版)》请在金锄头文库上搜索。

1、12.1 共用体类型与共用体变量 12.2 共用体变量的引用 12.3 共用体变量的应用 12.4 位运算与位段结构 12.5 枚举类型 12.6 类型定义,第十二章 共用体与枚举类型,2019/10/18,C语言程序设计教程,1,12.1 共用体类型与共用体变量,共用体是由用户定义的数据类型。 有时需要使几种不同类别的变量存放到同一段内存单元中,也就是使用覆盖技术,几个变量互相覆盖。这种使几个不同的变量共同占用一段内存单元的结构,称为“共用体”类型的结构。 1. 共用体类型定义的一般形式 共用体类型定义用关键字union标识, 形式为: union 标识符 成员说明列表 ;,2019/10/

2、18,C语言程序设计教程,2,标识符给出共用体名, 是共用体类型名的主体, 定义的共用体类型由“union 标识符”标识。,2.共用体变量的定义,(1) 先定义共用体类型, 再定义共用体变量:,union 共用体名 成员表 ; union 共用体名 变量表;,union data int i; char ch; float f; ; union data a,b,c;,2019/10/18,C语言程序设计教程,3,(2) 定义共用体类型的同时定义共用体变量,union 共用体名 成员表 变量表;,union data int i; char ch; float f; a,b,c;,(3)定义共

3、用体类型时,省略共用体类型名,同时定义共用体类型变量 union 成员表 变量表;,union int i; char ch; float f; a,b,c;,4,注意区分: “共用体”变量:各成员占相同的起始地址,在内存中所占字节数度等于最长的成员在内存中所占的字节数。 “结构体”变量:各成员占不同的地址,在内存中所占字节数等于全部成员在内存中所占的字节数之和。,union int i; char ch; float f; b;,struct int i; char ch; float f; a;,2019/10/18,C语言程序设计教程,5,12.2 共用体变量的引用,共用体变量不能直接使

4、用,和结构体变量一样只能使用里面的某个成员,其成员同样通过点运算描述。形式为: 共用体变量名.成员名,union int i; char ch; float f; a;,例如:左边定义的共用体类型变量a ,a占有4个字节的空间,a.i 表示其整型成员,a.ch表示其字符型成员,a.f表示其单精度型成员。,2019/10/18,C语言程序设计教程,6,说明: (1) 共用体变量中,可以包含若干个成员及若干种类型,但共用体成员不能同时使用。在每一时刻,只有一个成员及一种类型起作用,不能同时引用多个成员及多种类型。 (2) 共用体变量中起作用的成员值是最后一次存放的成员值,因为共用体变量所有成员共同

5、占用同一段内存单元,后来存放的值将原先存放的值覆盖,故只能使用最后一次给定的成员值。如: a.i=278, a.ch=D, a.f=5.78; 不能企图通过下面的printf函数得到a.i和a.ch的值: printf(“%d,%c,%f”, a.i, a.ch, a.f); 但能得到a.f的值。,2019/10/18,C语言程序设计教程,7,(3) 共用体变量的地址和它的各个成员的地址相同。 (4) 不能企图引用共用体变量名来得到某成员的值。 (5) 共用体变量不能作函数参数,函数的返回值也不能是共用体类型。 (6) 共用体类型和结构体类型可以相互嵌套,共用体中成员可以为数组,甚至还可以定义

6、共用体数组。,2019/10/18,C语言程序设计教程,8,例12.1 写出下列程序的执行结果,main() union exx int a,b; struct int c,d;lpp; e=10; e.b=e.a+20; e.lpp.c=e.a+e.b; e.lpp.d=e.a*e.b; printf(“%d,%dn”,e.lpp.c,e.lpp.d); ,程序运行结果如下: 60,3600,2019/10/18,C语言程序设计教程,9,12.3 共用体变量的应用 例12.2 设有若干教师的数据,包含有教师编号、姓名、职称,若职称为讲师,则描述他们的所讲课程,若职称为教授,则描述他们所写论文

7、数目。,union cf char clname10; /*所讲课程*/ int num; /*论文数目*/ ; struct teachers int no; /*编号*/ char name12; /*姓名*/ char zc; /*职称*/ union cf x; /*可变字段, 为所讲课程或论文数目*/ teach3;,2019/10/18,C语言程序设计教程,10,#define format %d %s %c main( ) int i; for(i=0; i3; i+) scanf(format, if ( teachi.zc= =L) scanf(”%s”, teachi.x

8、.clname); else if (teachi.zc= =P) scanf (”%d”, &teachi.x .num); else printf (”input data errorn”); ,2019/10/18,C语言程序设计教程,11,for(i=0; i3; i+) printf ( %d %s %c , teachi.no,teachi.name,teachi.zc); if (teachi.zc= =L) printf (”%sn”, teachi.x.clname); else if ( teachi. zc= = P ) printf (“%dn“, teachi.x.

9、num); else printf(data errorn); ,2019/10/18,C语言程序设计教程,12,12.5 枚举类型,如果一个变量只有几种可能的值,可以定义为枚举类型。 “枚举”:将变量可能的值一一列举出来。变量的值只能取列举出来的值之一。 枚举类型的定义 枚举类型定义用关键字enum标识,形式为: enum 枚举名标识符=整常数, 枚举变量名; 枚举元素(非一般意义上的常量,也不是变量,而只是一个符号),只能是标识符,而不能是字符常量或符号常量,标识符代表什么含义,完全由程序员决定。数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增。,2019/10/18,C语言程序设计

10、教程,13,(1) 定义枚举类型status, 包含复制与删除两种状态: enum statuscopy, delete; 枚举类型status仅有两个数据,一个是copy,一个是delete, 序号为0、 1, 代表复制与删除。 (2) 定义枚举类型color,包含红、黄、蓝、白、黑五种颜色: enum color red, yellow, blue, white, black; 枚举类型color有red、 yellow、 blue、 white、 black五个数据, 序号为0、 1、 2、 3、 4, 代表红、 黄、 蓝、 白、 黑五种颜色。 在定义枚举类型时,程序员可在枚举数据时通过

11、“=”号自己规定序号,并影响后面的枚举数据的序号,后继序号以此递增。例如:enum statucopy=6, delete;则copy的序号为6, delete的序号为7。,2019/10/18,C语言程序设计教程,14,2. 枚举类型变量的定义,(1) 先定义枚举类型, 再定义枚举类型变量: enum 标识符 枚举数据表; enum 标识符 变量表; 例如: enum color red,yellow, blue, white, black; enum color c1, c2; (2) 在定义枚举类型的同时定义枚举类型变量: enum 标识符 枚举数据表 变量表; 例如: enum col

12、or red,yellow,blue,white,black c1, c2; ,2019/10/18,C语言程序设计教程,15,(3) 直接定义枚举类型变量: enum 枚举数据表 变量表; enum red,yellow, blue,white, black c1, c2; 说明: (1)枚举元素是常量,不是变量。在中按定义的顺序取值0、1、. 例:c1 = yellow; printf(“%d“, c1); 输出整数1。 (2)枚举类型变量可以进行赋值运算。枚举类型是有序类型, 枚举类型数据还可以进行关系运算。枚举类型数据的比较转化成对序号进行比较, 只有同一种枚举类型的数据才能进行比较。

13、 如:if(c1=c2) printf(“n%s”,”The color is same”); if(c1=red) printf(“n%s”,”red”);,2019/10/18,C语言程序设计教程,16,12.6 类型定义 除了可以直接使用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;,2019/10/18,C语言程序设计教程,17,(3)typedef struct node long num; char name10; struct node *next; node,*link;,指定用node代替上述结构体类型,用link代替结构体指针类型,这样node stu1,stu2;等价于struct node stu1,stu2;而link p,q;等价于struct node *p,*q;或 node *p,*q;,2019/10/18,C语言程序设计教程,18,归纳起来,声明一个新的类型名的方法是

15、 先按定义变量的方法写出定义体(如:int j;)。 将变量名换成新类型名(如:将j换成integer)。 在最前面加typedef(如:typedef int integer;)。 然后可以用新类型名去定义变量。 再以定义上述的数组类型为例来说明: 先按定义数组变量形式书写:int a10; 将变量名a换成自己指定的类型名:int arr10; 在前面加上typedef,得到typedef int arr10; 用来定义变量:arr a;,2019/10/18,C语言程序设计教程,19,关于typedef的说明: 用typedef可以声明各种类型名,但不能用来定义变量。 用typedef只是对已经存在的类型增加一个类型名,而没有创造新的类型。 typedef与#define有相似之处,如: typedef int integer; #define integer int; 两者的作用都是用integer 代表int。,2019/10/18,C语言程序设计教程,20,

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

当前位置:首页 > 高等教育 > 大学课件

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