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

struct 和 union 的区别?

struct和union的分对应点总结

  1. 存储方式
    • struct:struct中的每个成员都拥有独立的内存空间。一个struct变量的总长度是其所有成员的长度之和,且通常会根据编译器的内存对齐规则进行适当调整。
    • union:union中的所有成员共享同一段内存空间。一个union变量的长度等于其最长成员的长度。在任何时候,union中只有一个成员的值是有效的。
  2. 内存分配与使用
    • struct:适合将不同类型的数据组合成一个单独的结构体,每个成员都有独立的存储空间,互不干扰。
    • union:适用于节省内存空间,尤其是在需要存储多个可能类型但一次只使用一种类型的数据时。
  3. 成员赋值与访问
    • struct:对struct中的不同成员赋值不会影响到其他成员的值,因为它们的内存空间是分开的。
    • union:对union中的某个成员赋值会覆盖其他成员的值,因为它们共享同一段内存。
  4. 用途与场景
    • struct:常用于定义复杂的数据结构,如链表节点、学生信息记录等,便于组织和管理数据。
    • union:常用于需要存储多种类型数据但每次只使用一种类型的场景,如网络协议解析、硬件寄存器访问等。
  5. 初始化与访问
    • struct:可以分别初始化每个成员,并通过成员名来访问它们。
    • union:通常只初始化一个成员,并通过相同的成员名来访问当前有效的成员。
  6. 内存布局
    • struct:内存布局通常按照成员在定义中出现的顺序排列,且可能会有内存对齐的填充字节。
    • union:所有成员都位于同一段内存区域的起始位置,不会有额外的填充字节。
  7. 安全性与错误检查
    • struct:由于每个成员都有独立的存储空间,因此在使用时相对安全,不易出现数据覆盖的问题。
    • union:使用union时需要格外小心,确保在访问某个成员之前已经正确地赋值了该成员,以避免数据混乱或未定义行为。

通过以上的分对应点总结,可以清晰地看到struct和union在存储方式、内存分配与使用、成员赋值与访问、用途与场景等方面的主要区别。在实际编程中,应根据具体的需求和场景选择合适的数据结构。

http://www.lryc.cn/news/319639.html

相关文章:

  • Linux - 安装 Jenkins(详细教程)
  • 【JAVA】JAVA方法的学习和创造
  • Rust写一个wasm入门并在rspack和vite项目中使用(一)
  • HTTP和HTTPS的区别,HTTPS加密原理是?
  • 基于Spring Boot+Vue的校园二手交易平台
  • 什么是软件开发?软件开发阶段划分是什么?并以LabVIEW为例进行说明
  • PTAL1-006 连续因子
  • 【Java】容器|Set、List、Map及常用API
  • Navicat 面试题及答案整理,最新面试题
  • android studio 连接mumu模拟器调试
  • 四连通与八连通的区别 -- 图例讲解
  • 关于分布式微服务数据源加密配置以及取巧方案(含自定义加密配置)
  • 快速了解JavaScript
  • 【安全类书籍-3】XSS跨站脚剖析与防御
  • http postman
  • [数据集][目标检测]螺丝螺母检测数据集VOC+YOLO格式2100张13类别
  • 华为鲲鹏ARM处理器920、916系列
  • AG32VF407 应用开发问答1
  • 一站式解决方案:uni-app条件编译及多环境配置,appid动态修改攻略!
  • 从政府工作报告中的IT热词统计探计算机行业发展(二)人工智能+:3次
  • Selenium库原代码WebDriver及WebElement方法属性总结
  • C# 部署ICE框架以及用例(VS2019)
  • PostgreSQL 数据加密怎么弄,应该用哪种方案
  • 1.通过AD组策略如何做封禁高危端口的策略?AD域控如何给加域的电脑做指定端口号封禁呢?
  • 05.BOM对象
  • 【Golang星辰图】Go语言游戏开发:选择合适的库加速你的开发过程
  • 51单片机-AT24C02(I2C总线)
  • 面试经典-MySQL篇
  • C#控制台贪吃蛇
  • [小程序开发] 构造页面