union联合体

【C语言】第六课 联合体(Union)和位域(Bit-field) 使用unionint i;// 整型成员float f;// 浮点成员// 字符数组成员内存共享:所有成员共享同一段内存,联合体的大小由其最大成员决定(例如上例中约为20字节,取决于和系统对齐规则)。访问成员:使用点操作符访问联合体变量的成员,若通过指针访问则使用箭头操作符->。// 此时联合体存储的是整数// 写入浮点数,覆盖之前的整数值初始化:联合体初始化时只能初始化其第一个成员。// 正确:初始化第一个成员i// C99后允许指定初始化成员,但仍需注意覆盖。 阅读详情

 union联合体是一个很有用工具。

先看union联合体的描述:

在The C Programming Language里面讲述union内存分配的原话是

1)联合体就是一个结构

2)联合体的所有成员相对于基地址的偏移量为0

3)此结构空间要大到总够容纳最“宽”的成员

4)并且,其对其方式要适合于联合体中所有类型的成员

 

可以看出,联合体简单理解是多个不同类型共享一份地址空间的结构。

它可以容纳多个类型在一个空间里面。

实际上,对所有内存来说,就是一块地址空间。编译器可以解释成多种类型。如把一个字节解释成char,

把2个字节的空间解释成short ,把4个字节的空间解释成int ...

单是对内存一说,都是一维的空间,本没有类型的。

但是类型可以由编译器记忆,解释成多种类型。

而联合体也可以使用户从不同的类型来解释同一块内存。

举个例子:

编个程序判断你的系统是大端还是小端

#include <stdio.h>
#include <stdlib.h>
typedef union myUnion{
   int d;
   char s[4];
}myUnion;

int main(){
        myUnion u;
        u.d=0x1234;
        if(u.s[1] == 0x12){
                printf("da duan\n");
        }else if(u.s[1] == 0x34){
                printf("da duan\n");
        }else{
                printf("unknow duan\n");
        }
        return 0;
}

 

上面就是利用union,从char 的分析一个int内存的情况。

这个int 为16进制:0x1234

小端地址存放规则是:4321...的顺序

大端地址存放的规则是:1234...的顺序。

小端法则:从开始地址的前8位(一个字符长度)43

而大端的法则:开始地址的前8位是12

 

unoin联合体还有一个很好用的地方,在某些时刻可以用来节省内存空间。一物二用。

 

如做一个自由链表,让一个union指定一个内存地址数据,存入内容,当这块内存空闲不用的时候,可以作为一个链接的指针。

这个就可以节省掉next 指针的开销。大量数据,这部分节省开销是十分可观的。

在stl源码分析里面,就有讲stl 的alloc 分配器是如何利用union来建一条自由链表,进行内存分配。

 

 

 

C语言联合体/共用体/union,枚举使用大全 文章目录一、前言二、联合体1.联合体基础2. 联合体的使用方法和使用场景2.1 多种访问内存途径共存2.2 联合体union和大小端(big-endian、little-endian)2.3 联合体union所占内存空间大小2.4 联合体union适用场合2.5 联合体使用的几个小技巧2.5 本质&进阶三、枚举1.枚举基础知识2.枚举变量的定义3.枚举的使用场景和使用方法3.1 枚举的遍历3.2 将整数转换为枚举 一、前言 构造类型或复杂类型主要有结构体、联合体和枚举。 结构体我们一般使用的比较频繁 阅读详情

相关推荐

【C语言】联合体-共用体 (union) 详解

C语言,联合体,共用体,union

虾米Life 4271

Codesys 数据结构:扩展数据类型之联合体(UNION) 类型详解

联合体就是不同类型的变量占用同一个内存的数据结构;其声明语法如下例如。

codesys01的博客 3408

CODESYS 联合体变量(Union)

联合Union也是一种特殊的自定义类型这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体),联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)

RXXW_Dor的博客 3328

C++ | 关于STL中的空间配置器 | 源码剖析

C++STL中的空间配置器解读,并结合源码剖析理解

凡事都是靠练习 1369

江科大51单片机笔记【1】单片机及开发板介绍

单片机,Micro Controller Unit,简称MCU,内部集成了CPU、RAM、ROM、定时器、中断系统、通讯接口等一系列电脑的常用硬件功能单片机的任务是信息采集(传感器)、处理(CPU)和硬件设备(电机、LED)的控制单片机算是一个袖珍版计算机,是一个完整的计算机系统,成本低体积小结构简单单片机的使用领域:智能仪表、实时工控、通讯设备、导航系统、家用电器等。

2301_80195807的博客 835

Kindle使用USB数据线传书封面无法显示问题

不建议按这个解决封面问题,首先USB多次插拔麻烦,其次就是我起初按博主方法没啥问题,后面无论我怎么个顺序都出现了‘暂无图片’,我的建议是在亚马逊退出国内只能USB传书的情况下,下载一个calibre 和。飞行模式下用calibre传书到kindle ,然后用Fix Kindle Ebook Cover 修复一下,后面你要继续飞行模式还是连网随你便,两步完事。2,‘’发送到设备’的时候也最好选择 ‘发送特定格式至’ 选择具体的电子书格式,你的电子书是azw3就选azw3,是mobi就选mobi。

meser88的博客 7422

数据结构 --共用体Union

union

weixin_64184244的博客 3427

abaqus wcm插件下载_Abaqus随机短纤维增强复合材料建模插件

文末附Abaqus随机短纤维增强复合材料建模插件下载链接前言短纤维增强复合材料相对于长纤维增强复合材料来说更容易制备,且短纤维的填充性能略有改善,可制造复杂产品,广泛应用于车辆、航空航天、建筑等行业,对短纤维增强复合材料进行细观力学分析,可对其宏观力学性能进行预测、分析破坏机理等。接下来对随机短纤维增强复合材料建模插件进行介绍。NO.1 【算法简介】难点一:此插件核心在于判断生成的纤维是...

weixin_39974882的博客 2833

联合体(union)的使用方法及其本质

有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。 1.联合体union的基本特性——和struct的同与不同 union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 不过区别也挺明显: 结构体(struct)中所有变量是“共存”的...

huqinwei的专栏 21万+

3.1使用Python读取excel的二维数据

要使用 Python 读取 Excel 的二维数据,可以使用 openpyxl 或 pandas 库。

kenshin1980的专栏 1032

2021-3-20组会 无监督训练下的音频分离 (音源分离) Unsupervised Audio Source Separation Using Generative Priors

0. 说明 一片具体论文的综述

ruclion的专栏 1350

C语言-联合体union

C语言-联合体union

让你爱上电路设计 3万+

智能车图像处理0-图像处理整体框架思路

1.总体框架如上所示,具体代码请查看后续文章。2.因为参与竞赛时间是大二,所以在编程中有许多不规范的地方(如变量的命名),大家见谅。3.原创文章,请勿侵权=-=

taiyuezyh的博客 1万+

C# 实现C的Union联合体

C# 实现C++ Union联合体前言联合体概念联合体union的基本特性——和struct的同与不同双刃剑——多种访问内存途径共存代码 前言 在使用STM32给上层Unity发串口消息的时候,下位机使用了C++的Union联合体作为数据类型,而Unity使用的C#并没有Union联合体这一概念,所以记录下来。 联合体概念 联合体union的基本特性——和struct的同与不同 union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct

SlowFeather's blog 6998

PD详解—第一章—Type-C连接

Type-C连接 今天大师匈下班比较早,再给大家侃一侃PD,希望大家支持。 PD和Type-c的关系 首先讲一下PD快充的实现步骤,本文主要是Source端(电源),Sink端的差不多也一样,只是策略不同而已。 TypeC连接-->广播电源能力Source capbility(数据交互)->打电压电流->等待其他指令。 所以typec连接是第一步,很多人会从字面意思理解typec连接,这不就是把线给插上去就好了吗? 不知道有没有优秀的同学想到正确答案; 正确答案:typec连接的本质是为

大师匈的博客 1万+

LVGL colorwheel组件教程一(调色板)

【代码】LVGL colorwheel组件教程一(调色板)

摸鱼专家 439

联合体union内存分配详解

1.概述 联合体union的定义方式与结构体一样,但是二者有根本区别。 在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。 2.联合体长度 在The C Programming Language里面讲述union内存分配的原话是 1)联合体就是一个结构 2)联合体的所有成员相对于基地址的偏移量为0 3)此结构空间要大到总够容纳最“宽”的成员 4)并且,其对其方式要适合于联合体中所有类型的成员 我的

qq_44986938的博客 1万+

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

联合体union详解

联合体union的基本用法,内存计算,对齐,大小端判断应用,与结构体的区别

m0_67669662的博客 1854

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C/C++中的联合体union介绍

目录 union定义与简单使用 内存分配与所占空间 多种访问内存途径共存 数据存储位置 union应用之寄存器读取 union,中文名“联合体、共用体”,在某种程度上是类似结构体struct的一种数据结构,联合体(union)和结构体(struct)同样可以包含很多种数据类型和变量。

会意的博客 4万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

在C#中使用Union联合体

以上两个变量在内存中占用的字节数不同,但都从同一个地址开始存放,也就是使用覆盖技术,几个变量互相覆盖。这段示例代码中使用了Windows Data Types(LPWSTR),在不同的平台中,指针的大小不一样,所以在C#中调用时,需要根据平台,定义对应的结构体。2、union起作用的成员是最后一次存放的变量,在存入一个新的成员后原有的成员就失去作用。56 /// 如果使用了union中的char[]字段,就使用这个结构体。46 /// 如果使用了union中的int字段,就使用这个结构体。

【微软MVP】zhaotianff的专栏 2928

C语言中联合体union的使用

一、前言     最近在准备考研的专业课中,遇到了C语言的联合体,在此总结一下。 二、简介     联合体union和结构体struct有一些相似之处,但两者本质上不同,在结构体中,各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和。而在联合体中,各成员共享一段内存空间,一个联合变量的长度等于各成员中的最大长度。应该说明的是,这里所谓的共享不是指把多个成员同时装入一个联合变

颗粒归仓 1687

关于联合体union的详细解释

关于联合体union的详细解释 1.概述 联合体union的定义方式与结构体一样,但是二者有根本区别。 在结构中各成员有各自的内存空间,一个结构变量的总长度是各成员长度之和。而在“联合”中,各成员共享一段内存空间,一个联合变量的长度等于各成员中最长的长度。 2.联合体长度 在The C Programming Language里面讲述union内存分配的原话是 1)联合体就是一个...

ll148305879的博客 2507

联合体union的个人使用心得

1.union联合体的特点 一、成员首地址相同,也就是通过不同的成员访问会从相同的起始地址开始取数据,至于取多少个地址的数据取决于具体成员的类型。    下面使用一段简单的代码验证:      执行的结果如下:共用体:共用内存首地址,可以使用其拥有的所有变量名对内存进行访问与修改。二、union内存空间的分配按照其占用内存最大的成员来进行分配    下面使用一个例子来说明:     输出的结果: ...

Wenlong_L的博客 2423

【C语言】【union联合体】

Union,即联合体,将几种数据类型联合起来的一种数据结构,且共用同一个内存空间。 例如,用24bit表示一个像素点,包含 RED、GREEN、BLUE,每种颜色8bit。使用联合体便可以定义如下: typedef union { struct __attribute__ ((packed)) { uint8_t r, g, b; }; uint32_t rgb; }...

iStoneWalker的博客 908

union联合体学习

union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。 不过区别也挺明显: 结构体(struct)中所有变量是“共存”的——优点是“有容乃大”,全面;缺点是struct内存空间的分配是粗放的,不管用不用,全分配。 而联合体(union)中是各变量是“互斥”的——缺点就是不...

aizongsai2251的博客 170

(二十一)联合体(union)

你见过一个联合吗?假如我们以弓箭手值班为例,他们轮流值班,而不是一齐值班,这就是一个联合体。在说道联合体union的时候,就不得不回忆一下结构体struct了,它的定义是这样的int num;char sex;在定义联合体时也一样,只不过关键字struct要改为union,就像这样int num;char sex;这次本来打算连着类class和union写了,但union的篇幅有点大,所以我打算分段写指针与迭代器位运算与进制二十一:联合体(union二十二:类(class。

2401_85898378的博客 1096
上一篇: STL源码剖析---红黑树原理详解下
下一篇: GCC 参数详解
hardworkba
博客等级 码龄18年 11粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值