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; }