union和struct的区别

struct和union的区别和存储方式 结构体struct是存储多个数据对象的内存块,这些对象不重叠。union是一块内存,用于存储多个数据对象,但只能存储其中最大的一个,因此在任何时候只能存储一个数据对象。 union和 struct 之间的主要区别在于 union 成员覆盖彼此的内存,因此 union 的 sizeof = 1 ,而 struct 成员一个接一个地分布在内存里(在可选的填充之间分布)。union也足够大以包含其所有成员,并且具有适合其所有成员的对齐方式。假设 int 只能存储在 2 个字节的地址并且是 2 个字节的宽度,而 l 阅读详情
 首先看看union,在c++中,union可能没有多大用处,在c语言中,可能我们要借助其完成很多巧妙的设计,下面是其一个完整的定义:

        union UTest         {              double dlOne;              char   chOne;              byte   bArray[4];         };

        好了,看到上面的定义,很像struct的定义,但是对于union来说,有几点是值得注意的:不能直接对其进行初始化;某个时候只能使用其中的一个元素;最后一点也是最重要的一点就是内存共享,分配给union内存的Size是其中Size最大的那个元素的Size。说到这里,既然union最重要的是内存共享,那么我们做如下定义:union UTest tEle;然后赋值:tEle.dlOne = 2.0f;现在是dlOne可用,下一步:tEle.chOne = 'A';到这里dlOne失去了其意义,chOne变得可用。

        然后,我们再来看看Struct,在struct中每一个元素都是分配内存的,而且都是有单独意义的,也就是说对一个变量的赋值并不影响其它变量的取值。到这里,各位应该明白这两者之间的区别了吧,事实上我个人认为,它们最主要的区别是在内存的分配和使用上。知道这一点,一切也就不难理解了。

        最后,在使用union的时候,可能有时候我们会来用其来对字节流进行分解和重组,这样使用的时候一定要注意各种内存对数据的存储,比如Intel是按高高低低的原则存储的,有些则是相反的。因此,这点因该值得注意,否则得到的可能和预期的结果不一样。

举例:使用union结构输出主机字节序

int main ( void ) {         union {                      short  s;                      char  c[sizeof(shor)];                    }un;           un.s = 0x0102;         printf ( "%s:", CPU_VENDOR_OS );           if ( 2==sizeof(short) )         {                 if ( 1==un.c[0]  && 2==un.c[1])                 {                         printf ( "big-endian/n" );                 }                 else if ( 2==un.c[0] && 1==un.c[1] )                 {                         printf ( "little-endian/n" );                 }                else                 {                         printf ( "unknown/n" );                 }         }        else        {                 printf ( "sizeof(short) = %d/n", sizeof(short) );        }           return 0; }

大数据分析工具Power BI(二):Power BI下载安装和模块介绍 首先在Microsoft官方网站上下载PowerBI Desktop,然后进行安装。id=58494点击"Next"后会弹出下载框,进行下载即可,下载好的PowerBI名称为"PBIDesktopSetup_x64.exe",也可以在"资料"中获取安装包,双击安装包即可安装。 阅读详情

相关推荐

rk3588 Android HDMI IN热插拔解决

1、公司在使用 别的厂商的板卡遇到一个问题,开机我们的app自启就会闪退,后来定位发现是camera 的open出错了,这个问题的出现是因为没有插HDMI IN输入的问题导致的,所以需要对HDMI IN的热插拔进行检测,后面我把这个问题也顺利解决了。下面是我的尝试和使用的解决办法。3、话不多说,我用的是读取系统文件实现的,但是这个方法,需要有status文件的系统读权限,可以修改设备下的/vendor/etc/init/hw/init.rk3588.rc文件修改的权限,这个问题交给自己或者厂家协商解决。

qq_54089476的博客 1918

结构体struct和联合体union最全讲解

摘要:首先感谢三位博主,并做出总结.首先了解一下struct的储存结构:一、结构体的访问1.结构体成员的的直接访问,如下结构体:struct  A{           int a;           long *b;           char c[20];};struct A   com;结构体成员通过操作符"."访问,表达式com.a的结果是个数组名,可以把它使用在任何可以使用数组名的地...

liguangxianbin的博客 7万+

自制温湿度计——STM32-L432KC驱动lcd1602和dht11温湿度显示

先给大家甩一张图片哈(附上网址)简单说一下这块板子在这个小项目里的小缺点:一、引脚有点少,lcd1602本来有两种传输数据方式,一种是4bit,另一种是8bit,但是这块板子对于这个项目来说引脚有点少,所以建议用4bit模式。然而,在网上是很难找到设置4bit传输模式的lcd1602的,这也是为什么我写这个blog。二、mbed-os有时候会有大大小小的问题,搞人心态是真的。比如库函数离奇失踪,从官网上下载库函数失败,重装也解决不了然后莫名其妙好了。

m0_72994251的博客 3912

struct和union的区别和联系

union与struct

不积跬步无以至千里 6783

离线环境下 Ubuntu 22.04 制作自定义apt源 安装 Docker环境 的部署方案

本文介绍了一种在无外网环境下部署服务器项目的离线方案。通过在外网环境中制作包含APT软件包和Docker镜像的离线资源包,实现在内网环境中的完整部署。方案详细说明了离线APT源的制作方法、Docker镜像的导出/导入流程,以及内网服务器的软件安装和网络配置步骤。特别强调了版本一致性、目录结构规范和网络适配等注意事项,适用于需要严格隔离网络的生产环境部署。该方案具有可扩展性,可根据实际需求调整软件包和镜像列表。

mmx_2022的博客 654

python解析通达信dat与blk数据文件【附源码】

本文介绍了一个完整的通达信金融数据解析器项目,该项目攻克了通达信专有二进制文件格式解析的技术难题。项目采用模块化架构,从基础二进制解析到增强数据分类,最终实现智能语义化列名生成,形成完整的数据处理链路。核心技术包括自适应编码检测、智能数据类型推断和基于业务规则的语义化处理,解决了逆向工程、多编码兼容性等挑战。项目成果显著,解析成功率达100%,数据可读性大幅提升,开发效率提高50%,为量化交易、可视化分析等场景提供了可靠数据支持。该方案不仅具备技术创新性,更具有实际工程应用价值,为金融数据分析领域提供了可复

qq_36224726的博客 2688

Struct和union的理解

结构体(struct)和共用体(union)都是用于组合多个不同类型的数据成员,但它们在内存存储方式和数据访问方式上存在差异。

马上毕业的小菜菜 1331

【Labview学习】——如何实现软件的中/英文切换

各位亲爱的小伙伴们大家好,这里是小万的labview专题,今天为大家带来的是软件的中/英文切换,在全球化的浪潮之下,各行各业发生着巨大的变化,emmm………… 以下是简单的演示图片,注意观察菜单栏和软件界面各控件的语言状态: 本次分享将分为两部分:菜单中英文切换&界面控件中英文切换 ** 菜单中英文切换 ** 1. 中/英文菜单制造 要想实现菜单的中/英文语言切换,就得做两个菜单,一个...

weixin_44827166的博客 1万+

【零基础学C语言】知识总结八:struct 结构体与 union 共用体

struct即结构体,C程序中经常需要用相关的不同类型的数据来描述一个数据对象。

致力于C语言C++知识分享! 4555

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

【WorkBuddy专栏25】如何选择大模型——积分消耗、用途场景、选型决策全指南

AI人人懂 931

华为FusionCompute之计算虚拟化

华为FusionCompute之虚拟化

jks212454的博客 2452

【基础知识】结构体(struct)和联合体(union)

目录1. 结构体(Struct)1.1 C++ 结构体和 C 语言结构体的区别1.2 结构体的对齐方式2. 联合体(Union)2.1 联合体特性3. 结构体和联合体的区别 在 C 语言中,结构体是一种自定义的复合数据类型,允许将不同数据类型的变量组合成一个单一的实体。结构体可以包含多个成员,每个成员可以是不同的数据类型,如整数、浮点数、字符、数组等。 结构体的定义通常在函数外部,并且在函数内部可以声明和使用结构体类型的变量。结构体的定义包含了结构体的名称和结构体成员的列表,每个

m0_56573171的博客 8510

金融监管压力测试场景生成

压力测试是一种评估金融资产或机构在极端市场条件下的表现和风险承受能力的方法。它通过模拟各种不利的市场情景,测试金融机构在这些情景下的财务状况和运营能力。压力测试的作用在于帮助金融机构识别潜在风险,评估应对策略,并制定应急预案。总结压力测试场景生成系统的开发过程和实现效果,强调其在金融监管中的重要性和应用价值。随着金融市场的发展,实时压力测试将越来越重要。未来,压力测试需要更加注重实时性和动态性,及时反映市场的变化。本文详细介绍了金融监管压力测试的重要性、核心概念、算法原理、系统架构以及实战案例。

AI天才研究院 1207

struct和union的区别

常见指令:

yukunjake的博客 3414

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

union 和 struct 的区别与联系

union ( 共用体):构造数据类型,也叫联合体   用途:使几个不同类型的变量共占一段内存(相互覆盖)  struct ( 结构体 ):是一种构造类型  用途: 把不同的数据组合成一个整体——自定义数据类型 主要区别: 1. struct和union都是由多个不同的数据类型成员组成, 但在任何同一时刻, union中只存放了一个被选中的成员; 而struct的所有成员都存在。在s

maopig的专栏 2705

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

union和struct的一些区别小结

union和struct的一些区别小结 1. union union中的所有成员共同占用一段内存,union的长度可以用sizeof运算符来求,union的长度要求必须: 1.至少要容纳最大成员类型变量的大小 2.必须是所有成员变量类型大小的整数倍 typedef union MyUnion//变量共同占用一段内存 { long i; int x; char a[17]; }TestUnion; int main() { TestUnion date; cout<<sizeof(da

qq_40877617的博客 319

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Struct 和 Union区别

一、Struct 和 Union有下列区别: 1.在存储多个成员信息时,编译器会自动给struct第个成员分配存储空间,struct 可以存储多个成员信息,而Union每个成员会用同一个存储空间,只能存储最后一个成员的信息。 2.都是由多个不同的数据类型成员组成,但在任何同一时刻,Union只存放了一个被先选中的成员,而结构体的所有成员都存在。 3.对于Union的不同成员赋值,将会对其他成员重写,原来成员的值就不存在了,而对于struct 的不同成员赋值 是互不影响的。 注:在很多地方需要对结构体的成员变

图像学习之旅 3077

C++ 中 struct 和 union 的区别及使用

内存分配方式:存储特性:访问方式:初始化: 2. 类型转换技巧 3. 协议解析优化 4. 变体记录实现 注意事项 安全性:访问非当前活跃的成员是未定义行为,可能导致程序崩溃或数据错误 C++17改进:引入了作为更安全的替代方案 构造函数限制:union不能包含有非平凡构造函数的成员(C++11后放宽了部分限制) 用途:union最适合用于需要节省内存且明确知道当前存储类型的场景 在C++中,union的这些特性使其特别适合底层编程、协议解析、硬件寄存器映射等需要精确控制内存布局的场景。

weixin_45422672的博客 322

struct class union的区别

1

ycwasdfasdf的博客 1797

C++中struct和union的区别

(1) 二者都是由不同的数据类型成员组成(否则也不需要定义这俩),但在任何同一时刻, 结构体存放所有的成员变量, 而共用体只存放一个被选中的成员。 (2)对于共用体的不同成员赋值,将会对其他成员重写, 原来成员的值就不存在了, 而对于结构体的不同成员赋值是互不影响的。比如: ...

享受当下 663

C语言中struct与union的区别

C语言中struct与union的区别

勇敢的心的网络笔记 8795

class 、struct和union的区别:

struct、union、class的区别

qq_38669789的博客 318

struct、union、const 和 #define 区别

1. struct、union struct可以存储不同类型数据,可以同时使用,union也可以存储不同类型的数据,但是只能同时存储其中的一种,也就是说当存储int类型的变量时,其他数据类型丢失,存储double时,int之类的数据也会丢失。 在一个联合体内可以定义多种不同的数据类型。union中的各个成员共用一块内存。 共用内存的大小是和union中占空间最大的元素所占用的空间一样大,即这些数据共享同一段内存。 通过这种方法,可以达到节省空间的目的。 与struct相同,union的默认访问权限也是公有的

欢迎来到小木虫1314的博客 565
上一篇: BusyBox介绍
下一篇: sockaddr和sockaddr_in
Humwen
博客等级 码龄22年 7粉丝 7原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值