据说:“联合是一种特殊的类类型,一次只能保存一个非静态数据成员。” (http://en.cppreference.com/w/cpp/language/union)
但它怎么能容纳更多的成员呢?
y
为 8 个字节,x
为 4 个字节。union 的大小是 MAX 元素的大小(8 个字节)。它不能容纳 4 + 8 = 12 个字节...
我很困惑。
#include <stdio.h>
#include <stdlib.h>
union number {
int x;
double y;
};
int main()
{
union number value;
// ok
value.x = 1;
printf("\n int: %5d\ndouble: %f\n", value.x, value.y);
// ok
value.y = 1.0;
printf("\n int: %5d\ndouble: %f\n", value.x, value.y);
// NOT OK! But if I swap `value.x and value.y` it will work properly...
value.y = 1.0;
value.x = 1;
printf("\n int: %5d\ndouble: %f\n", value.x, value.y);
return 0;
}
输出是