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 <iostream>
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 <iostream>
using namespace std;
#include <string.h>
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 <iostream>
using namespace std;
#include <string.h>
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;
}