首页 > 编程语言 > 详细

C++ 联合体Union学习

时间:2021-06-06 22:34:41      阅读:24      评论:0      收藏:0      [点我收藏+]

https://www.cnblogs.com/fengty90/p/3768840.html

1.Union

当多个数据需要共享内存或者多个数据每次只取其一时,可以利用联合体(union)。

  • 1)联合体是一个结构;
  • 2)它的所有成员相对于基地址的偏移量都为0
  • 3)此结构空间要大到足够容纳最"宽"的成员;
  • 4)其对齐方式要适合其中所有的成员;
#include<iostream>
using namespace std;

union U1
{
    int n;
    char s[11];
    double d;
};
union U2
{
    int n;
    char s[5];
    double d;
};
int main()
{
    U1 u1;
    U2 u2;
    cout<<sizeof(u1)<<\t<<sizeof(u2)<<endl;
    cout<<"u1各数据地址:\n"<<&u1<<\t<<&u1.d<<\t<<&u1.s<<\t<<&u1.n<<endl;
    cout<<"u2各数据地址:\n"<<&u2<<\t<<&u2.d<<\t<<&u2.s<<\t<<&u2.n<<endl;
}

输出:

16    8
u1各数据地址:
0x74fe10    0x74fe10    0x74fe10    0x74fe10
u2各数据地址:
0x74fe08    0x74fe08    0x74fe08    0x74fe08

可以发现u1和u2对象的地址,就是首个元素的地址,并且所有元素的地址都相同!

SGI STL的二级空间配置器的free list用到了它。

https://www.cnblogs.com/fengty90/p/3768840.html

C++ 联合体Union学习

原文:https://www.cnblogs.com/BlueBlueSea/p/14856430.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!