uinion数据类型是指不同的数据项存放于同一段内存单元的一种数据结构类型!
这么多的成员共同占同一个空间,空间大小由类型最大的确定,如下的空间就为一个float类型大小;
如:
一个共同体变量不是同时存放多个成员的值,而只能存放其中的一个值, 就是最后赋予它的值;
union test
{
int a;
float b;
char c;
}x;
x.a = 3;
x.b = 4.5;
x.c = 'A';
这样你只看到x.c='A',而其它已经被覆盖掉;以最后一个赋值有效
x.a = 3;
x.c = 'A';
x.b = 4.5;
如果是这样,就只能看到有x.b=4.5,其它就被覆盖掉;
****例程如下:****
#include <iostream>
using namespace std;
int main()
{
union test
{
int a;
float b;
char c;
}x;
x.a = 3;
x.b = 4.5;
x.c = 'A';
cout << "x.a = " << x.a << endl;
cout << "x.b = " << x.b << endl;
cout << "x.c = " << x.c << endl;
cout << endl;
x.a = 3;
x.c = 'A';
x.b = 4.5;
cout << "x.a = " << x.a << endl;
cout << "x.b = " << x.b << endl;
cout << "x.c = " << x.c << endl;
return 0;
}
运行结果如下:
x.a = 1083179073
x.b = 4.50003
x.c = A
x.a = 1083179008
x.b = 4.5
x.c =
-------------------------------------
大家会有疑问,
为什么当
x.a = 3;
x.b = 4.5;
x.c = 'A';
而结果中
x.a = 1083179073
x.b = 4.50003
x.c = A
x.b 的值是 4.50003 呢?? 而不是被 最后赋的值 'A’ 呢??
-----是因为 x.c只有8位,并没有完全覆盖x.b的内容