文档详情

C语言共用体与枚举概要1.ppt

发布:2017-06-24约字共10页下载文档
文本预览下载声明
C语言程序设计教程 第12章 共用体与枚举类型 12.1 共用体类型与共用体变量 12.2 共用体变量的引用 12.3 共用体变量的应用 12.4 位运算与位段结构 12.5 枚举类型 12.6 类型定义 第十二章 共用体与枚举类型 * C语言程序设计教程 * 12.1 共用体类型与共用体变量 共用体是由用户定义的数据类型。 有时需要使几种不同类别的变量存放到同一段内存单元中,也就是使用覆盖技术,几个变量互相覆盖。这种使几个不同的变量共同占用一段内存单元的结构,称为“共用体”类型的结构。 1. 共用体类型定义的一般形式 共用体类型定义用关键字union标识, 形式为: union 标识符 { 成员说明列表 }; * C语言程序设计教程 * ? 标识符给出共用体名, 是共用体类型名的主体, 定义的共用体类型由“union 标识符”标识。 2.共用体变量的定义 (1) 先定义共用体类型, 再定义共用体变量: union 共用体名 { 成员表 }; union 共用体名 变量表; union data { int i; char ch; float f; }; union data a,b,c; * C语言程序设计教程 * (2) 定义共用体类型的同时定义共用体变量 union 共用体名 { 成员表 } 变量表; union data { int i; char ch; float f; }a,b,c; (3)定义共用体类型时,省略共用体类型名,同时定义共用体类型变量 union { 成员表 } 变量表; union { int i; char ch; float f; }a,b,c; * 注意区分: “共用体”变量:各成员占相同的起始地址,在内存中所占字节数度等于最长的成员在内存中所占的字节数。 “结构体”变量:各成员占不同的地址,在内存中所占字节数等于全部成员在内存中所占的字节数之和。 union { int i; char ch; float f; } b; struct { int i; char ch; float f; }a; * C语言程序设计教程 * 12.2 共用体变量的引用 共用体变量不能直接使用,和结构体变量一样只能使用里面的某个成员,其成员同样通过点运算描述。形式为: 共用体变量名.成员名 union { int i; char ch; float f; }a; 例如:左边定义的共用体类型变量a ,a占有4个字节的空间,a.i 表示其整型成员,a.ch表示其字符型成员,a.f表示其单精度型成员。 * C语言程序设计教程 * 说明: (1) 共用体变量中,可以包含若干个成员及若干种类型,但共用体成员不能同时使用。在每一时刻,只有一个成员及一种类型起作用,不能同时引用多个成员及多种类型。 (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的值。 * C语言程序设计教程 * (3) 共用体变量的地址和它的各个成员的地址相同。 (4) 不能企图引用共用体变量名来得到某成员的值。 (5) 共用体变量不能作函数参数,函数的返回值也不能是共用体类型。 (6) 共用体类型和结构体类型可以相互嵌套,共用体中成员可以为数组,甚至还可以定义共用体数组。 * C语言程序设计教程 * 例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,%d\n”,e.lpp.c,e.lpp.d); } 程序运行结果如下: 60,3600 * C语言程序设计教程 * 12.3 共用体变量的应用 例12.2 设有若干教师的数据,包含有教师编号、姓名、职称,若职称为讲师,则描述他们的所讲课程,若职称为教授,则描述他们所写论文数目。 union cf {char clname[10]; /*所讲课程*/
显示全部
相似文档