C++之共用体
定义以及使用:
1 union Data 2 { 3 int a; 4 char b; 5 }data; 6 cout<<"cin>>data.a:"; 7 cin>>data.a; 8 cout<<"cin>>data.b:"; 9 cin>>data.b; 10 cout<<"cout<<data.a<<endl:"; 11 cout<<data.a<<endl; 12 cout<<"cout<<data.b<<endl:"; 13 cout<<data.b<<endl;
程序输出结果:
显然a 与 b 共用了内存,但是在输出时各自保留了数据类型。
然后我想到了另一种情况:当a与b大小不同时,会怎么样?
1.char a;char b[2];时:
2.char a[2];char b;时
对结果的猜想:
a,b共用一块内存,该空间的容量由a,b中的最大值确定,a中前面容量大小与b容量大小相同的部分与b所共有。
验证:
1 union Data 2 { 3 char a; 4 char b[2]; 5 char c[3]; 6 }data; 7 cout<<"cin>>data.a:"; 8 cin>>data.a; 9 cout<<"cin>>data.b:"; 10 cin>>data.b; 11 cout<<"cin>>data.c:"; 12 cin>>data.c; 13 cout<<"cout<<data.a<<endl:"; 14 cout<<data.a<<endl; 15 cout<<"cout<<data.b<<endl:"; 16 cout<<data.b<<endl; 17 cout<<"cout<<data.c<<endl:"; 18 cout<<data.c<<endl;
结果:
与预测不一致!
以上实验过程只证明了一点:对于共用体类型数据,占有的存储空间等于占有存储空间最大的共用体成员所占空间。
不要乱调用a,b。