您好,欢迎访问三七文档
融智技术学院第16章共用体共用体又称为联合体,它和结构体一样也是一种由用户自己定义的数据类型,它也由若干个成员数据组成。其成员的数据类型可以是相同的,也可以是不同的。共用体类型定义共用体类型变量、数组和指针变量的定义共用体类型变量、数组和指针变量的引用共用体应用举例用typedef定义数据类型融智技术学院16.1共用体类型定义由于不同的共用体可以不有同的成员,因此共用体也需要用户在程序中根据自己的需要自己定义。定义共用体之后,就可以使用这种数据类型。融智技术学院16.1.1定义共用体所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。由于不同的的共用体类型的数据可以有不同的成员,因此共用体也是需要用户在程序中自己定义的一种数据类型。共用体的定义格式如下:union共用体名{数据类型1成员1名;数据类型2成员2名;…数据类型n成员n名;};融智技术学院16.1.2共用体的存储从共用体的定义中可以看出,共用体数据类型与结构体在形式上非常相似,但两者有本质上的不同。在结构体中各成员有各自的内存空间,一个结构体变量的总长度是各成员长度之和。而共用体中,各成员共享一段内存空间,一个共用体变量的长度等于各成员中最长的长度。uniondata/*共用体*/{inta;floatb;doublec;chard;};融智技术学院对于共用体,作以下几点说明:(1)共用体只有定义了该共用型的变量、数组或指针变量后,才会给该变量、数组和指针变量分配内存。(2)同一个内存可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种。也就是说,每一瞬时只有一个成员起作用,其他的成员不起作用,即不是同时存在和起作用。(3)共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。(4)共用体变量的地址和它的各成员的地址都是同一地址。(5)不能对共用体变量名赋值,不能企图引用变量名来得到一个值,也不能在定义共用体变量时对它初始化。(6)不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针。(7)共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型定义中,数组成可以作为共用体的成员。融智技术学院16.2共用体类型变量、数组和指针变量的定义定义了共用体之后,就可以用这种数据类型来定义相应的变量、数组以及指针变量等。共用体变量、数组和指针变量的定义和一般的变量、数组和指针变量的定义方法相同,惟一需要注意的是“数据类型符”必须是用户自己定义的公用体,即“union共用体名”。共用体变量、数组和指针变量的定义与结构体变量、数组及指针变量的定义方法相同。分为三种:第一种是先定义共用体,再定义共用体变量、数组及指针变量;第二种是定义共用体的同时定义共用体变量、数组及指针变量;第三种是定义共用体的同时定义共用体变量、数组及指针变量,但省略共用体名。融智技术学院16.2.1先定义共用体,再定义共用体变量、数组及指针变量其定义格式如下:union共用体名{数据类型1成员1名;数据类型2成员2名;…数据类型n成员n名;};…union共用体名变量名,共用体数组名[数组长度],*共用体指针变量名;融智技术学院16.2.2定义共用体的同时定义共用体变量、数组及指针变量这种方式的定义如下:union共用体名{数据类型1成员1名;数据类型2成员2名;……数据类型n成员n名;}变量名,共用体数组名[数组长度],*共用体指针变量名;融智技术学院16.2.3定义共用体变量、数组及指针变量时省略共用体名这种格式其实跟第二种格式相似,只是把共用体名省略掉了。格式如下:union{数据类型1成员1名;数据类型2成员2名;…数据类型n成员n名;}变量名,共用体数组名[数组长度],*共用体指针变量名;融智技术学院16.3共用体类型变量、数组和指针变量的引用union{intclassno;charaddress[20];}a,b[5],*p;(1)用共用体变量引用其成员,引用格式如下:共用体变量名.成员名例如:a.classno(2)用共用体数组元素来引用其成员,引用格式如下:共用体数组名[下标].成员名例如:b[0].classno融智技术学院(3)共用体指针变量引用该共用体的变量或数组,格式如下:共用体指针变量=&共用体变量名共用体指针变量=&共用体数组名[下标]共用体指针变量=共用体数组名(4)使用共用体指针变量引用共用体的成员,引用格式如下:(*共用型指针变量).成员名共用型指针变量-成员名融智技术学院16.4共用体应用举例【例16-6】设有若干个成员的数据,其中有教师和学生。学生的数据包括号码、姓名、性别、职业、班级。教师数据包括号码、姓名、职业、职务。教师和学生的数据是不同的,现要求把它们放在同一张表格中,如表16-1所示。要求输入人员的数据,然后再输出。融智技术学院16.5枚举类型在实际问题中,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月,一个班每周有六门课程等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。为此,C语言提供了一种称为“枚举”的类型。融智技术学院16.6枚举类型的定义枚举的定义枚举类型定义的一般形式为:enum枚举名{枚举值表};例如:enumweekday{sun,mou,tue,wed,thu,fri,sat};融智技术学院对于枚举类型需要说明以下几点:(1)定义的枚举类型用“enum标识符”标识。枚举数据(枚举常量)是一些特定的标识符,标识符代表什么含义,完全由程序员决定。数据枚举的顺序规定了枚举数据的序号,从0开始,依次递增。(2)在定义枚举类型时,程序员可在枚举数据时通过“=”号自己规定序号,并影响后面的枚举数据的序号,后继序号以此递增。(3)枚举变量的定义与结构体和联合体一样,枚举变量也可用不同的定义方式,即先定义枚举类型再定义变量、定义枚举类型的同时定义变量或直接定义变量。融智技术学院16.7枚举类型变量的赋值和引用枚举类型变量在定义以后,要使用这些枚举类型变量,以使其具有一定的值。枚举类型变量的赋值和引用需要注意以下几点:(1)枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。(2)枚举元素本身由系统定义了一个表示序号的数值,从0开始顺序定义为0,1,2…。(3)只能把枚举值赋予枚举变量,不能把元素的数值直接赋予枚举变量。融智技术学院16.8用typedef定义数据类型自定义数据类型符的语法格式为:typedef类型符1类型符2;1.用typedef定义基本数据类型typedef基本数据类型符用户自定义数据类型符;2.用typedef定义数组类型typedef数据类型符用户自定义数组类型符[数组长度];3.用typedef定义指针类型typedef数据类型符*用户自定义指针类型符;融智技术学院用typedef定义结构体的格式如下:typedefstruct{数据类型1成员名1;数据类型2成员名2;…数据类型n成员名n;}用户自定义结构类型符;融智技术学院对于typedef自定义数据类型需要做以下几点说明:(1)用typedef自定义数据类型,只是对已有的数据类型加一个类型名,并没有产生新的数据类型。如:typedefintINTEGER;INTEGERa;(2)用typedef可以定义各种数据类型名,但不能定义变量。用typedef定义的是数据类型的别名,可以用这个别名去定义相应的变量。(3)有时可以使用宏定义来代替typedef的功能,但事实上,二者是不同的。宏定义只是简单的字符串替换,是在预编译的时候处理完成的;而typedef是在编译的时候完成的,其更为灵活。
本文标题:第16章 共用体
链接地址:https://www.777doc.com/doc-3354110 .html