当前位置: 首页 > news >正文

C++ union 联合(八股总结)

union(联合体)允许在同一内存位置上存储不同的数据类型,所有成员共享相同的内存空间。

内存布局

由于联合体的所有成员都共享同一块内存,因此联合体的大小是其最大成员的大小。联合体的实际大小取决于其最大成员的类型和对齐要求。

union Data {int i;      // 4 bytesfloat f;    // 4 byteschar c;     // 1 byte
};int main() {cout << "Size of union: " << sizeof(Data) << " bytes" << endl;return 0;
}
  • 在这个例子中,intfloat 都是 4 字节,char 是 1 字节,因此 union Data 的大小将是 4 字节(最大成员的大小)。实际的大小可能会由于对齐要求(padding)而有所不同,但它不会小于最大成员的大小。

联合体与结构体的区别

特性structunion
内存分配每个成员有独立的内存空间所有成员共享同一块内存空间
内存大小大小是所有成员大小之和大小是最大成员的大小
成员访问可以同时访问所有成员每次只能访问一个成员
用途用于包含多个不同类型的数据,并且同时使用用于只在某一时刻存储一个类型的数据

初始化联合体

联合体的初始化方式类似于结构体,但只能为一个成员赋值。因为联合体的所有成员共享同一内存,赋值时会覆盖其他成员的值。

union Data {int i;float f;char c;
};int main() {Data d = {10};  // 初始化第一个成员 icout << "d.i: " << d.i << endl;  // 输出 10d.f = 3.14;  // 现在 d.f 被赋值,d.i 被覆盖cout << "d.f: " << d.f << endl;  // 输出 3.14return 0;
}
http://www.lryc.cn/news/520344.html

相关文章:

  • 聊聊AI Agent
  • scala代码打包配置(maven)
  • 慧集通(DataLinkX)iPaaS集成平台-业务建模之业务对象(二)
  • C++使用minio-cpp库在minio中创建bucket
  • 【大模型】大语言模型的数据准备:构建高质量训练数据的关键指南
  • 【解决】okhttp的java.lang.IllegalStateException: closed错误
  • TCP-IP详解卷 TCP的超时与重传
  • Linux服务器查看【可用端口号连接】的命令和方式【netstat,ss,lsof】
  • 【WPS】【WORDEXCEL】【VB】实现微软WORD自动更正的效果
  • Attention计算中的各个矩阵的维度都是如何一步步变化的?
  • 【数模学习笔记】插值算法和拟合算法
  • 探索 C++ 与 LibUSB:开启 USB 设备交互的奇幻之旅
  • 二、模型训练与优化(4):模型优化-实操
  • 3D可视化产品定制,应用于哪些行业领域?
  • Avalonia 入门笔记(零):概述
  • Unity TextMesh Pro入门
  • [论文阅读] (35)TIFS24 MEGR-APT:基于攻击表示学习的高效内存APT猎杀系统
  • 12 USART串口通讯
  • CF 368A.Sereja and Coat Rack(Java实现)
  • 清华大学、字节跳动等单位联合发布最新视觉语言动作模型RoboVLMs
  • 网络安全、Web安全、渗透测试之笔经面经总结
  • .NET Core NPOI 导出图片到Excel指定单元格并自适应宽度
  • python bs4 selenium 查找a href=javascript:();的实际点击事件和url
  • 三 BH1750 光感驱动调试1
  • UE材质节点Fresnel
  • linux的大内核锁与顺序锁
  • 用户注册模块用户校验(头条项目-05)
  • 面向对象的基本概念
  • 深度学习每周学习总结R4(LSTM-实现糖尿病探索与预测)
  • 如何使用 PHP 操作亚马逊 S3 对象云存储