[flydream@flydream ThinkingInC++]$ cat union.cpp -n
1 #include <iostream>
2
3 using namespace std;
4
5 union Packed
6 {
7 char i;
8 short j;
9 int k;
10 long l;
11 float f;
12 double d;
13 };
14
15 int main(int argc, char **argv)
16 {
17 cout << "sizeof(Packed) = " << sizeof(Packed) << endl;
18 Packed x;
19 x.i = 'c';
20 cout << x.i << endl;
21 x.d = 3.14159;
22 cout << x.d << endl;
23 x.f = 2.222;
24 cout << x.i << endl; /* 作为一个整形输出无意义 */
25
26 cout << "&x.i = " << &x.i << endl; /* 这里的输出乱码不知道为什么 */
27 cout << "&x.j = " << &x. j<< endl;
28 cout << "&x.k = " << &x.k << endl;
29 cout << "&x.l = " << &x. l<< endl;
30 cout << "&x.f = " << &x.f << endl;
31 cout << "&x.d = " << &x.d << endl;
32 return 0;
33 }
[flydream@flydream ThinkingInC++]$ g++ union.cpp
[flydream@flydream ThinkingInC++]$ ./a.out
sizeof(Packed) = 8
c
3.14159
? 作为一个整形输出无意义
&x.i = ?5@�! @�� 这里的输出乱码不知道为什么
&x.j = 0xbfc069d8
&x.k = 0xbfc069d8
&x.l = 0xbfc069d8
&x.f = 0xbfc069d8
&x.d = 0xbfc069d8
[flydream@flydream ThinkingInC++]$