C++ 联合体Union学习
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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步