发布日期:2015-12-22 16:12 来源: 标签: 编程语言 C++教程 C++公共体 C++公共体类型
共用体也是一种构造数据类型,它是将不同类型的变量存放在同一内存区域内。共用体也称为联。共用体的类型定义、变量定义及引用方式与结构相似,但它们有着本质的区别:结构变量的各成员占用连续的不同存储空间,而共用体变量的各成员占用同一个存储区域。
     有时需要使几种不同类型的变量存放到同一段内存单元中。例如可以一个整形变量,一个字符型变量,一个实型变量放在同一地址开始的内存单元中。以上3个变量在内存单元中占的字节数不同,但是都从同一地址开始存放。也就是使用覆盖技术,几个变量互相覆盖。
     共用体也是一种构造数据类型,它是将不同类型的变量存放在同一内存区域内。共用体也称为联。共用体的类型定义、变量定义及引用方式与结构相似,但它们有着本质的区别:结构变量的各成员占用连续的不同存储空间,而共用体变量的各成员占用同一个存储区域。
共用体变量的定义
共用体变量的定义与结构变量定义相似,首先,必须构造一个共用体数据类型,再定义具有这种类型的变量。共用体类型定义的一般方法:
    union 共用体名 { 共用体成员表 } ;
其中,共用体成员表是对各成员的定义,形式为:类型说明符 成员名;与定义结构变量一样,定义共用体变量的方法有以下三种:
(1)先定义共用体类型,再定义该类型数据
例如:
union data
{
   char n[10];
   int a;
   double f;
};
union data x,y[10];
(2)在定义共用体类型的同时定义该类型变量
例如:
    union data
    {
     char n[10];
     int a;
     double f;
    }x,y[10];
(3)不定义共用体类型名,直接定义共用体变量
例如:
   union
   {
     char n[10];
     int a;
     double f;
    }x,y[10];
      定义了共用体变量后,系统就给它分配内存空间。因共用体变量中的各成员占用同一存储空间,所以,系统给共用体变量所分配的内存空间为其成员中所占用内存空间最多的成员的单元数。共用体变量中各成员从第一个单元开始分配存储空间,所以各成员的内存地址是相同的。
共用体变量的引用
定义了共用体变量后,即可使用它。若需对共用体变量初始化,只能对它的第一个成员赋初始值。例如:union data x={"zhangsan"};  是正确的,
   union data x={"zhangsan",12,40000, 78,5};是错误的。
虽然共用体数据可以在同一内存空间中存放多个不同类型的成员,但在某一时刻只能存放其中的一个成员,起作用的是最后存放的成员数据,其他成员不起作用,如引用其他成员,则数据无意义。
例如,对data类型共用体变量,有以下语句:
x.a=100;  strcpy(x.n,"zhangsan");  x.f=90.5;
则只有x.f是有效的,x.a与x.n目前数据是无意义的,因后面的赋值语句将前面共用体数据覆盖了。
例.分析下列程序的输出结果,用共用体数据的特性给以正确的解释。
#include <stdio.h>
#include <string.h>
void main()

   union bt {  int k; char c[3];} a;
    a.k=0;
   strcpy(a.c,"AB");    //第8行
   printf("%o , %o\n",a.c[0],a.c[1]);
   printf("%d\n",a.k);   
   a.k=2;                 // 第11行
   printf("%o , %o, %o \n",a.c[0],a.c[1],a.c[2]);
   printf("%d\n",a.k);   
}
程序执行:
101 , 102
16961
2 , 0, 0

相关评论

专题信息
    C++是在C语言的基础上开发的一种面向对象编程语言,应用广泛。C++支持多种编程范式 --面向对象编程、泛型编程和过程化编程。最新正式标准C++于2014年8月18日公布。 其编程领域众广,常用于系统开发,引擎开发等应用领域,是至今为止最受广大程序员受用的最强大编程语言之一,支持类:类、封装、重载等特性! 本教程从基础讲解了C++语言,希望对大家有所帮助,望多多支持中国站长网络学院。