活用 C语言之union的精妙之用

一、union的基本定义

Union的中文叫法又被称为共用体、联合或者联合体。它的定义方式与结构体相同,但意义却与结构体完全不同。下面是union的定义格式:

union  共用体名
{成员列表}共用体变量名;

它与结构体的定义方式相同,但区别在于共用体中的成员的起始地址都是相同的,而结构体中的成员则具有各自的地址。

下面,我们通过一个struct与union的嵌套来说明两者的区别所在:

struct my_elem
{int type;union my_info{char*str;int number;}value;}elem_t;

访问方式与结构体相同,例如,要访问number变量,可以以如下的方式进行访问:

elem_t.value.number = 10;

Union和struct的区别是共用体中的成员的起始地址都是一样的,而结构体中的成员都具有各自的地址。以下是Elem_t在内存中的存储示意图。

看到变量在内存中的存储位置之后,也就明白了union的特性了。共用体的好处在于,程序中能够使用不同类型的变量并且只占用一个变量的存储空间,从而节省存储空间。

在上述程序中,共用体的两个成员所占的存储空间大小一样,都是四个字节,因此这个共用体所占存储空间的大小就是四个字节。如果共用体的成员的存储空间大小不一样,那么共用体存储空间的大小取决于成员中存储空间最大的一个。

二、union的应用场景

1、数据打包 :灵活转换数组和数据

我们平时会遇到一些数字传感器,往往他转换完成后的数据需要2 个字节或者4 个字节来存储,比如陀螺仪的3 轴 加速度的三个寄存器都是16bit 的,但是我们通过IIC 或者SPI 读取的时候都是一个字节

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/764589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【理解机器学习算法】之Clustering算法(DBSCAN)

DBSCAN(基于密度的空间聚类应用噪声)是数据挖掘和机器学习中一个流行的聚类算法。与K-Means这样的划分方法不同,DBSCAN特别擅长于识别数据集中各种形状和大小的聚类,包括存在噪声和离群点的情况。 以下是DBSCAN工作原理的概述&am…

centos7 安装php82

安装epel扩展源 yum -y install epel-release vim 镜像地址: https://mirrors.aliyun.com/remi/ #这个阿里源专门提供了php的各种版本 下载镜像(如果epel扩展源包含php8.2版本,可不需要下载此镜像。建议下载,百利无一害) …

KubeSphere的基本使用操作

KubeSphere的基本使用操作 基本使用用户角色创建企业空间创建项目 创建应用创建密钥创建MySQL密钥创建WordPress密钥 创建存储卷创建MySQL存储卷创建Wordpress存储卷 添加组件服务类型添加MySQL组件添加WordPress组件 访问Wordpress 基本使用 用户角色 KubeSphere 中的权限控制…

FloodFill算法——岛屿数量

文章目录 题目解析算法解析代码解析 题目解析 岛屿数量 题目依旧是熟悉的配方,熟悉的味道,还是那个0还是那个1还是那个二维矩阵,这时候BFS和DFS闻着味就来了,我们来看一下这个题目,这个题目也很容易理解如下图有一个…

【每日一问】IOS手机上Charles证书过期怎么办?

1、如何查看证书是否过期? 设置>通用>VPN与设备管理 2、在Charles中重置证书 步骤1:重置证书 Help>SSL Proxying>Reset Charles Root Certificate… 步骤2:在浏览器中,下载证书 首先,手机连上代理,然…

qt+ffmpeg 实现音视频播放(三)之视频播放

一、视频播放流程 (PS:视频的播放流程跟音频的及其相似!!) 1、打开视频文件 通过 avformat_open_input() 打开媒体文件并分配和初始化 AVFormatContext 结构体。 函数原型如下: int avformat_open_inpu…

Sphinx使用md文档构建失败

​使用 sphinx 构建文档,有时候已经放置好了文档却无法读入生成。 解决方案 在环境中下载安装好相应的库: pip install sphinx_markdown_tablespip install m2r打开生成的 source目录下的 conf.py,文件,在文件中加入: extensio…

19.C++20中的std::latch和std::barrier

文章目录 线程闩std::latch和线程卡std::barrier线程闩std::latch线程卡std::barrier的使用线程闩std::latch和线程卡std::barrier的区别reference 欢迎访问个人网络日志🌹🌹知行空间🌹🌹 线程闩std::latch和线程卡std::barrier …

Java项目:71 ssm基于ssm+vue的外卖点餐系统+vue

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统功能 系统分为前台订餐和后台管理: 1.前台订餐 用户注册、用户登录、我的购物车、我的订单、商品列表 2.后台管理 商品管理&#xf…

QT tableWidget横向纵向设置

横向控件 要设置QTabWidget选项卡的字体方向,可以使用QTabWidget的setTabPosition()方法。通过传递Qt枚举值QTabWidget.east或QTabWidget.west作为参数,可以设置选项卡的字体方向为从左到右或从右到左。 myTabWidget QTabWidget() myTabWidget.setTabP…

Grass手机注册使用教程,利用闲置手机WiFi带宽赚钱

文章目录 Grass是什么? 项目介绍Grasss手机使用步骤第一步:下载狐猴浏览器第二步:注册账户(已注册直接跳过)第三步:安装Grass Chrome插件1、推荐离线安装2、在线安装 第四步:登录第五步&#xf…

MySQL 更新执行的过程

优质博文:IT-BLOG-CN Select语句的执行过程会经过连接器、分析器、优化器、执行器、存储引擎,同样的 Update语句也会同样走一遍 Select语句的执行过程。 但是和 Select最大不同的是,Update语句会涉及到两个日志的操作redo log(重做…

Flutter-excel导入多语言脚本使用步骤

Flutter-excel导入多语言脚本使用步骤 1.下载Node.js brew install node2.输入以下命令来验证Node.js是否已经成功安装: node -v如果一切正常,Node.js应该会显示其版本信息。(我这里直接显示了) 如果不正常,需要看…

CSS 逻辑属性

css逻辑属性 CSS 逻辑属性与值是 CSS 的一个模块,其引入的属性与值能做从逻辑角度控制布局,而不是从物理、方向或维度来控制。 物理属性(left、right、top、bottom);逻辑属性(start、end) CSS 逻辑属性是一组属性,允许开发人员创建对不同屏幕尺寸和语言响应更快的布…

欧科云链OKLink:坎昆升级后,Layer2项目是否更具竞争力?

在坎昆升级激活之际,OKLink 上线以太坊坎昆升级 Dencun 专题页 👉 从专业链上数据分析角度,带来一场充实且即时的 Layer2 数据盛宴。 在近日由 137Labs 发起,Cointime 主持的 Layer2 生态专场讨论中,OKLink 产品…

AndroidStudio插件出现“Compatible with IntelliJ IDEA only“错误时的解决方案

原因:插件比较老&#xff0c;配置可能存在问题 1.修改plugins文件夹下的jar包(插件) 找到AndroidStudio所在位置 打开plugins文件夹,找到需要修改的jar包,通过压缩软件用zip方式打开&#xff0c;找到\META-INF\plugin.xml并编辑&#xff0c;在<version>xxxx</versi…

docker基础(七)之docker start/stop/kill/restart/pause/unpause

文章目录 概述命令速查docker start语法OPTIONS详解&#xff1a; docker stop语法OPTIONS详解&#xff1a; docker restart语法OPTIONS详解&#xff1a;示例和说明 docker kill语法OPTIONS说明&#xff1a; docker pause语法示例 docker unpause语法示例 docker stop 和docker …

InnoDB 缓存

本文主要聊InnoDB内存结构, 先来看下官网Mysql 8.0 InnoDB架构图 MySQL :: MySQL 8.0 Reference Manual :: 17.4 InnoDB Architecture 如上图所示,InnoDB内存主要包含Buffer Pool, Change Buffer, Log Buffer, Adaptive Hash Index Buffer Pool 其实 buffer pool 就是内存中的…

Python---常用的web框架

Django 特点&#xff1a;Django是一个全功能的Web框架&#xff0c;提供了许多内置的功能和工具&#xff0c;如ORM、表单处理、认证等。它的设计理念是“一切都包含在框架中”&#xff0c;因此适合构建复杂的、大型的Web应用程序。优势&#xff1a;Django具有强大的开发效率和稳…

练习实践-进程回收01-找到并清理僵尸进程

参考来源&#xff1a; https://blog.csdn.net/qq_36528114/article/details/71076110 https://blog.51cto.com/u_12083623/2363384 极客时间-性能优化实战-CPU性能篇 进程回收中的孤儿和僵尸进程的特点 演示环境&#xff1a; 操作系统&#xff1a;Ubuntu18.04 查询工具&#x…