上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
3.6 共用体
所谓共用体(或称联合,union)是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。共用体类型也用来描述类型不同的数据,但与结构体类型不同,共用体数据成员存储时采用了覆盖技术,会共享(部分)存储空间。
1.共用体类型变量的定义
共用体类型变量的定义方式与结构体类型变量的定义方式类似,也可采用以下3种方法。
方法一:先定义共用体类型再定义变量名。
这种形式的定义格式如下:
union 结构体名 { 共用体成员说明 };
定义好一个共用体类型后,就可以用它来定义共用体变量了。一般格式如下:
union 共用体名 变量名1,变量名2,变量名3,…,变量名n;
例如:
union data { int i; char ch; float f; }; union a,b,c; //定义共用体变量a、b、c
方法二:在定义共用体类型的同时定义共用体变量名。
这种形式的定义格式如下:
union 结构体名 { 共用体成员说明 }变量名1,变量名2,变量名3,…,变量名n;
例如:
union data { int i; char ch; float f; }a,b,c; //定义共用体变量a、b、c
方法三:直接定义共用体变量。
这种形式的定义格式如下:
union { 共用体成员说明 }变量名1,变量名2,变量名3,…,变量名n;
例如:
union { int i; char ch; float f; }a,b,c; //定义共用体变量a、b、c
关于共用体有以下几点说明。
①同一个内存可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不能同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都存在和起作用。
②共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去了作用。
③共用体变量的地址和它的各成员的地址是同一地址。
④不能对共用体变量名赋值,也不能企图引用变量名来得到一个值,并且不能在定义共用体变量时对它进行初始化。
⑤不能把共用体变量作为函数参数,也不能使函数带回共用体变量,但可以使用指向共用体变量的指针。
⑥共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体可以出现在共用体类型的定义中,数组也可以作为共用体的成员。
2.共用体变量的引用
只有先定义了共用体变量才能在后续程序中引用它,但需注意:不能引用共用体变量,而只能引用共用体变量中的成员。共用体变量成员引用的一般格式如下:
共用体变量名.成员名;
例如:
a.i=15; //引用共用体变量a中的整型变量i a.f=1.35; //引用共用体变量a中的实数型变量f