开发手册 欢迎您!
软件开发者资料库

C++ 共用体

结构体(Struct)是一种构造类型或复杂类型,它可以包含多个类型不同的成员。在C++中,还有另外一种和结构体非常类似的语法,叫做共用体(Union)。

1、定义声明

共用体是一种特殊的数据类型,允许您在相同的内存位置存储不同的数据类型。可以定义一个带有多成员的共用体,但是任何时候只能有一个成员带有值。共用体提供了一种使用相同的内存位置的有效方式。共用体有时也被称为联合或者联合体。其定义格式为:

union 共用体名{
成员列表
};

例如,

union Data{   int i;   float f;   char  str[20];};

1)共用体也是一种自定义类型,可以通过它来创建变量

例如,

union data{    int n;    char ch;    double f;};union data a, b, c;

2)定义共用体的同时创建变量

union data{    int n;    char ch;    double f;} a, b, c;

3)如果不再定义新的变量,也可以将共用体的名字省略

union{    int n;    char ch;    double f;} a, b, c;

例如,

#include using namespace std;union data{    int n;    char ch;    short m;};int main(){    union data a;    printf("%d, %d\n", sizeof(a), sizeof(union data) );    a.n = 0x40;    printf("%X, %c, %hX\n", a.n, a.ch, a.m);    a.ch = '9';    printf("%X, %c, %hX\n", a.n, a.ch, a.m);    a.m = 0x2059;    printf("%X, %c, %hX\n", a.n, a.ch, a.m);    a.n = 0x3E25AD54;    printf("%X, %c, %hX\n", a.n, a.ch, a.m);    return 0;}

2、访问共用体成员

访问共用体的成员,需要使用成员访问运算符(.)。

例如,

#include using namespace std;#include union Data{   int i;   float f;   char  str[20];};int main( ){   union Data data;           data.i = 10;   data.f = 220.5;   strcpy( data.str, "C/C++ 语言");   cout << "data.i : " <<  data.i << endl;   cout << "data.f : " <<  data.f << endl;   cout << "data.str : " << data.str << endl;   return 0;}

上面示例的输出结果中,共用体的 i 和 f 成员的值有损坏,因为最后赋给变量的值占用了内存位置,这也是 str 成员能够完好输出的原因。

共用体是任何时候只能有一个成员带有值。同一时间应该只用一个成员。

例如,

#include using namespace std;#include union Data{   int i;   float f;   char  str[20];};int main( ){   union Data data;           data.i = 10;   cout <<  "data.i :  " <<  data.i << endl;   data.f = 220.5;   cout << "data.f :  " << data.f << endl;   strcpy( data.str, "C/C++ 语言");   cout << "data.str :  " <<  data.str << endl;   return 0;}