再上一篇:第七章 结构体、共同体和枚举类型
上一篇:7.2 位域
主页
下一篇:7.4 枚举类型
再下一篇:第八章 指针和引用
文章列表

7.3 共同体的定义及应用

《VC++程序设计基础》,讲述C++语言的语法和标准库,以及Visual C++ 函数库和MFC类库的使用,并附相关代码示例。

7.3.1共同体类型

设有字符类型变量c,整型类型变量j和实型变量x;当这三个变量在使用的过程中,肯定是互斥的,即当用到c时,一定用不到j和x,当用j时,一定不用c和x;那么就没有必要为这三个变量分配不同的存储空间,可以让这三个变量共同使用同一个存储空间。具有这种存储特性的变量称为共同体类型的变量。要定义这种变量,首先要定义共同体类型。共同体类型的定义方法与定义结构体类同,只要用union代替struct:

union <共同体类型名> {

<类型< <成员名1> ;

《<类型> <成员名2>;

... ;

<类型> <成员名n> ;》

} ;

其中共同体类型名由标识符构成,成员名也由标识符构成。对结构体类型所作的说明也适合于共同体。

7.3.2 共同体变量的说明及使用

说明共同体变量的方法与说明结构体变量的方法完全类同,也有三种方法:第一种是先定义共同体类型,再定义共同体变量;第二种方法是在定义共同体类型的同时,定义共同体变量;第三种是不定义共同体的类型名,直接定义共同体变量。如:

union data {

char c;

int j;

} ;

data d1,d2; //先定义类型,后定义共同体变量d1,d2

union data1 {

char c1;

int i1;

} x1,x2,x3; //定义共同体类型的同时定义共同体变量x1, x2,x3union {

char c ;

int i;

float x;

} a, b,c; //不定义共同体类型,直接定义共同体变量

使用共同体变量成员的一般格式为:

<共同体变量名>.<成员名>

如:

x.c1=’a’; a.i=25;

由于共同体变量的的使用方法与结构体类型的变量相同,加上计算机的主存越来越大,通常的程序设计中已较少使用共同体类型的变量,由此,我们就不举例作进一步说明了。7.3.3 共同体数据类型的特点

共同体变量与结构体变量类同,它不能直接输入输出,用作函数的参数时,也是作为值传递,同类型的共同体变量之间可以相互赋值等。在使用的过程中,还应注意以下几点:

1、同一共同体内的所有成员共用同一个存储区域,其存储区域的大小由占用最大存储区的成员所决定。如:

union {

char c1;

char s[3];

float x;

} y;

由于c1占用一个字节,s占用3个字节,x占用4个字节;因此为y分配4个字节的存储空间,由这三个成员共同使用这四个字节的空间。

2、在任一时刻, 在一个共同体变量内,只有一个成员起作用,若同时使用几个成员,则所表示的含义就不对了。

3、共同体类型中的成员可为已定义的任一类型,当然也可以是共同体或结构体。结构体中的成员也可以是共同体。