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

C语言中union的用法

在C语言中,union(联合体)是一种特殊的复合数据类型,它允许多个不同的数据成员共享同一块内存空间。与struct(结构体)不同的是,union中的所有成员共用同一个内存地址,因此同时只能存储一个成员的值。

定义union

union Data {int i;float f;char str[20];
};

union的特性

  1. 共用内存union的所有成员共享同一个内存地址,所以union的大小等于最大成员的大小。
  2. 节省内存:与struct相比,union节省了内存,因为它一次只存储一个成员的值。
  3. 只能存一个成员的值:每次只能给一个成员赋值,赋新值会覆盖之前的值。

使用union

#include <stdio.h>union Data {int i;float f;char str[20];
};int main() {union Data data;data.i = 10;printf("data.i: %d\n", data.i);data.f = 220.5;printf("data.f: %.1f\n", data.f);// 由于共用内存,存储新的成员会覆盖之前的成员值data.i = 15;printf("data.i after modifying: %d\n", data.i);printf("data.f after modifying: %.1f\n", data.f);  // 值可能变得不可预期return 0;
}

关键点

  1. 当访问一个成员时,其他成员的值可能会被破坏。
  2. union通常用于节省内存,特别是在需要存储多种不同类型但在某一时刻只使用其中一种的场景中,比如硬件寄存器处理。

应用场景

union常用于:

  • 低级硬件访问:联合体可以用于直接操作寄存器或内存。
  • 数据解析:比如网络协议数据包的解析中,不同的数据类型可能使用同一内存区域。
http://www.lryc.cn/news/443277.html

相关文章:

  • C++速通LeetCode中等第18题-删除链表的倒数第N个结点(最简单含注释)
  • 鸿蒙 WebView 设置 Header
  • 电力施工作业安全行为检测图像数据集
  • 大数据实验2.Hadoop 集群搭建(单机/伪分布式/分布式)
  • 【CSS in Depth 2 精译_036】5.6 Grid 网格布局中与对齐相关的属性 + 5.7本章小结
  • Qt圆角窗口
  • 研究生第一次刷力扣day1
  • flink自定义process,使用状态求历史总和(scala)
  • 股指期货理论价格计算公式是什么?
  • 解决R包依赖版本不兼容问题
  • HarmonyOS开发者基础认证考试试题
  • 如何使用 React、TypeScript、TailwindCSS 和 Vite 创建 Chrome 插件
  • 机器学习——Stacking
  • 在HTML中添加图片
  • R语言机器学习算法实战系列(二) SVM算法(Support Vector Machine)
  • gdb调试使用记录
  • ESXi安装【真机和虚拟机】(超详细)
  • 基于SpringBoot+Vue的高校门禁管理系统
  • 【Linux-基础IO】C语言文件接口回顾 系统文件概念及接口
  • 系统架构笔记-3-信息系统基础知识
  • Linux下编程实现网络传送文件
  • 【速成Redis】04 Redis 概念扫盲:事务、持久化、主从复制、哨兵模式
  • SQL Server 2022的数据类型
  • Linux基础3-基础工具4(git),冯诺依曼计算机体系结构
  • 后台数据管理系统 - 项目架构设计-Vue3+axios+Element-plus(0916)
  • MySQL基础篇(黑马程序员2022-01-18)
  • nodejs 013:Prect 样式复用(multiple classes)例子
  • MQ入门(一):同步调用和异步调用--RabbitMQ基础入门
  • 由于安全风险,安全领导者考虑禁止人工智能编码
  • 地图相关的系统软件及插件