资源描述:
《C语言共用体与枚举.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、12.1共用体类型与共用体变量12.2共用体变量的引用12.3共用体变量的应用12.4位运算与位段结构12.5枚举类型12.6类型定义第十二章共用体与枚举类型8/5/20211C语言程序设计教程12.1共用体类型与共用体变量共用体是由用户定义的数据类型。有时需要使几种不同类别的变量存放到同一段内存单元中,也就是使用覆盖技术,几个变量互相覆盖。这种使几个不同的变量共同占用一段内存单元的结构,称为“共用体”类型的结构。1.共用体类型定义的一般形式共用体类型定义用关键字union标识,形式为:union标识符{成
2、员说明列表};8/5/20212C语言程序设计教程标识符给出共用体名,是共用体类型名的主体,定义的共用体类型由“union标识符”标识。2.共用体变量的定义(1)先定义共用体类型,再定义共用体变量:union共用体名{成员表};union共用体名变量表;uniondata{inti;charch;floatf;};uniondataa,b,c;8/5/20213C语言程序设计教程(2)定义共用体类型的同时定义共用体变量union共用体名{成员表}变量表;uniondata{inti;charch;f
3、loatf;}a,b,c;(3)定义共用体类型时,省略共用体类型名,同时定义共用体类型变量union{成员表}变量表;union{inti;charch;floatf;}a,b,c;8/5/20214C语言程序设计教程注意区分:“共用体”变量:各成员占相同的起始地址,在内存中所占字节数度等于最长的成员在内存中所占的字节数。“结构体”变量:各成员占不同的地址,在内存中所占字节数等于全部成员在内存中所占的字节数之和。union{inti;charch;floatf;}b;struct{inti;charch;flo
4、atf;}a;8/5/20215C语言程序设计教程12.2共用体变量的引用共用体变量不能直接使用,和结构体变量一样只能使用里面的某个成员,其成员同样通过点运算描述。形式为:共用体变量名.成员名union{inti;charch;floatf;}a;例如:左边定义的共用体类型变量a,a占有4个字节的空间,a.i表示其整型成员,a.ch表示其字符型成员,a.f表示其单精度型成员。8/5/20216C语言程序设计教程说明:(1)共用体变量中,可以包含若干个成员及若干种类型,但共用体成员不能同时使用。在每一时刻,只
5、有一个成员及一种类型起作用,不能同时引用多个成员及多种类型。(2)共用体变量中起作用的成员值是最后一次存放的成员值,因为共用体变量所有成员共同占用同一段内存单元,后来存放的值将原先存放的值覆盖,故只能使用最后一次给定的成员值。如: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的值。8/5/20217C语言程序设计教程(3)共用体变量的地址和它的各个成员的地址相同。(4
6、)不能企图引用共用体变量名来得到某成员的值。(5)共用体变量不能作函数参数,函数的返回值也不能是共用体类型。(6)共用体类型和结构体类型可以相互嵌套,共用体中成员可以为数组,甚至还可以定义共用体数组。8/5/20218C语言程序设计教程例12.1写出下列程序的执行结果main(){unionexx{inta,b;struct{intc,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,%d”,e.lpp.c,e.lpp
7、.d);}程序运行结果如下:60,36008/5/20219C语言程序设计教程12.3共用体变量的应用例12.2设有若干教师的数据,包含有教师编号、姓名、职称,若职称为讲师,则描述他们的所讲课程,若职称为教授,则描述他们所写论文数目。unioncf{charclname[10];/*所讲课程*/intnum;/*论文数目*/};structteachers{intno;/*编号*/charname[12];/*姓名*/charzc;/*职称*/unioncfx;/*可变字段,为所讲课程或论文数目
8、*/}teach[3];8/5/202110C语言程序设计教程#defineformat″%d%s%c″main(){inti;for(i=0;i<3;i++){scanf(format,&teach[i].no,teach[i].name,&teach[i].zc);if(teach[i].zc==‘L’)scanf(”%s”,teach[i].x.clname);elsei