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

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

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

内存布局

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

union Data {
    int i;      // 4 bytes
    float f;    // 4 bytes
    char 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};  // 初始化第一个成员 i
    cout << "d.i: " << d.i << endl;  // 输出 10

    d.f = 3.14;  // 现在 d.f 被赋值,d.i 被覆盖
    cout << "d.f: " << d.f << endl;  // 输出 3.14

    return 0;
}

http://www.kler.cn/a/506822.html

相关文章:

  • 【前端】框架-构建-包管理-语言-语法-生态工具
  • 玩转随机数:用 JavaScript 掌控不可预测的魔力!
  • Kylin Linux V10 替换安装源,并在服务器上启用 EPEL 仓库
  • 客户案例:某家居制造企业跨境电商,解决业务端(亚马逊平台)、易仓ERP与财务端(金蝶ERP)系统间的业务财务数据对账互通
  • 如何修复Android上未安装的应用程序
  • 算法竞赛(蓝桥杯)贪心算法1——数塔问题
  • 微调神经机器翻译模型全流程
  • 紫光无人机AI飞控平台介绍
  • Mybatis-Plus:简介、入门案例
  • 【Excel】【VBA】双列排序:坐标从Y从大到小排列之后相同Y坐标的行再对X从小到大排列
  • 【matlab】matlab知识点及HTTP、TCP通信
  • npm发布工具包+使用
  • windows11下 podman-desktop 复制插件文件 到 RabbitMQ 容器内,并启用
  • 安全规约、脱敏规范、敏感逻辑的保护方案、防止 SQL 注入
  • 25/1/16 嵌入式笔记 STM32F108
  • C语言结构体漫谈:从平凡中见不平凡
  • 《基于深度学习的多色光度巡天项目天文目标检测框架》论文精读
  • 1 使用EMIO
  • 【Axure】配色库
  • 5、docker-compose和docker-harbor
  • 电池预测 | 第21讲 基于Gamma伽马模型结合EM算法和粒子滤波算法参数估计的锂电池剩余寿命预测
  • python中自动化playwright录制功能跳过繁琐的系统登录操作
  • Git在add的时候出现error: unable to index file 的问题,导致add失败的问题解决
  • 大数据就业前景及待遇如何?
  • 打造更安全的Linux系统:玩转PAM配置文件
  • 为Hugo/Hexo设计的在线Markdown编辑器