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。

转载于:https://www.cnblogs.com/85per/p/3826505.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值