求大神解释下关于共用体的一个疑惑
#include "stdafx.h"#include <iostream>
using namespace std;
union datatype
{
double a;
int b;
}x,y;
void main()
{
x.a=8;
x.b=4;
y.b=4;
y.a=8;
cout<<"x.a="<<x.a<<" "<<"x.b="<<x.b<<endl;
cout<<"y.a="<<y.a<<" "<<"y.b="<<y.b<<endl;
cout<<"the size of union is:"<<sizeof(datatype)<<endl;
cout<<"the size of a is:"<<sizeof(double)<<endl;
cout<<"the size of b is:"<<sizeof(int)<<endl;
system("pause");
}
运行结果为:
x.a=8 x.b=4
y.a=8 y.b=0
the size of union is:8
the size of a is:8
the size of b is:4
看书上讲共用体在使用时,始终是最新的赋值冲刷掉前面的赋值,以最大的数据类型为其共用体大小。我自己验证了下,发现不同的赋值顺序会直接影响到最后数据是否被冲刷掉。就像上面x共用体,在先给double型的a赋值为8,再给int型的b赋值为4,按照书中所讲,最后整个共用体以后放的4为准,那里面就只有int的8,但实际输出时a仍然有值,并未被刷掉。这是为什么???
而在将两个类型的数据换顺序存放后,先放的int型4被后来的double型8冲刷掉,读取int型的b时只读取到double型a的前部分,显示为0.