基于Proteus的AVR单片机C语言程序设计与仿真
上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