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。

posted @ 2014-07-05 22:20  crq85分  阅读(397)  评论(0编辑  收藏  举报