UNION嵌套STRUCT的两种类型

news2024/9/20 6:29:28

1. STRUCT里面的总长度大于UNION中的最大长度

        在UNION类型中,嵌套如STRUCT类型,其中STRUCT的类型还比UNION类型中最大的类型的长度还长的时候,会如何处理呢,看下面示例

程序源码

#include "stdafx.h"

typedef unsigned long ULONG;
typedef unsigned char UCHAR;
typedef void *HANDLE;

typedef struct
{
	ULONG f_data1;
	UCHAR f_data2;
	union
	{
		ULONG s_data1;
		UCHAR s_data2;
		struct
		{
			ULONG           s_Value1;			
			ULONG           s_Value2;		
		}data_second;

	}u;
}DATA_FIRST;

int _tmain(int argc, _TCHAR* argv[])
{
	DATA_FIRST  d1;
	d1.f_data1 = 0x11111111;
	d1.f_data2 = 0x23;
	d1.u.s_data1 = 0x44444444;
	d1.u.s_data2 = 0x56;
	d1.u.data_second.s_Value1 = 0x789a;
	d1.u.data_second.s_Value2 = 0x88888888;
		
	printf("Print data: \n");
	printf("\t	d1.f_data1 = 0x%X \n", d1.f_data1);
	printf("\t	d1.f_data2 = 0x%X \n", d1.f_data2);
	printf("\t	d1.u.s_data1 = 0x%X \n", d1.u.s_data1);
	printf("\t	d1.u.s_data2 = 0x%X \n", d1.u.s_data2);

	printf("\t	d1.u.data_second.s_Value1 = 0x%X \n", d1.u.data_second.s_Value1);
	printf("\t	d1.u.data_second.s_Value2 = 0x%X \n", d1.u.data_second.s_Value2);
		
	return 0;
}

运行结果

源码分析

2. TRUCT里面的总长度小于等于UNION中的最大长度

        在UNION类型中,嵌套如STRUCT类型,其中STRUCT的类型比UNION类型中最大的类型的长度还小时候,会如何处理呢,看下面示例

程序源码


#include "stdafx.h"

typedef unsigned long ULONG;
typedef unsigned char UCHAR;
typedef void *HANDLE;

typedef struct
{
	ULONG data1;

	union
	{
		ULONG data2;
		UCHAR data3;
		struct
		{
			ULONG           value1: 4;
			ULONG           value2 : 4;
			ULONG           value3 : 4;
			ULONG           value4 : 4;
			ULONG           value5 : 4;
			ULONG           value6 : 4;
			ULONG           value7 : 4;
			ULONG           value8 : 4;
		}value;

	}u;
}DATA_FIRST;

int _tmain(int argc, _TCHAR* argv[])
{
	DATA_FIRST  d;
	d.data1 = 0x11112222;
	d.u.data2 = 0x22334455;
	d.u.data3 = 0xaa;
	d.u.value.value5 = 0xb;

	printf("Print data: \n");

	printf("\t	d.data1 = 0x%X \n", d.data1);
	printf("\t	d.u.data2 = 0x%X \n", d.u.data2);
	printf("\t	d.u.data3 = 0x%X \n", d.u.data3);

	printf("\t	d.u.value.value1 = 0x%X \n", d.u.value.value1);
	printf("\t	d.u.value.value2 = 0x%X \n", d.u.value.value2);
	printf("\t	d.u.value.value3 = 0x%X \n", d.u.value.value3);
	printf("\t	d.u.value.value4 = 0x%X \n", d.u.value.value4);
	printf("\t	d.u.value.value5 = 0x%X \n", d.u.value.value5);
	printf("\t	d.u.value.value6 = 0x%X \n", d.u.value.value6);
	printf("\t	d.u.value.value7 = 0x%X \n", d.u.value.value7);
	printf("\t	d.u.value.value8 = 0x%X \n", d.u.value.value8);
		
	return 0;
}

运行结果:

源码分析:

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

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

相关文章

研究生考试报名上传手持身份证照片,如何拍清晰并且过审

研究生考试是中国高等教育中的一项重要考试,在每年9月下旬开始。在报名过程中,上传手持身份证照片是一个关键步骤,它直接关系到报名是否能够顺利通过审核。本文将为你提供4个实用的技巧,帮助你拍摄出既清晰又符合要求的手持身份证…

【三刷C语言】各种注意事项

这里是阿川的博客,祝您变得更强 ✨ 个人主页:在线OJ的阿川 💖文章专栏:C语言入门到进阶 🌏代码仓库: 写在开头 现在您看到的是我的结论或想法,但在这背后凝结了大量的思考、经验和讨论 目录 1.…

Linux中yum命令

1.Linux常见软件安装方式 a.yum/apt b.rpm安装包安装 c.源码安装 2.yum常用指令 在root权限下可以安装、卸载程序 安装 yum install [package] 卸载 yum remove [package] 还可以使用yum list列出yum源中所有可安装程序 yum list

【Flink Flick CDC】学习笔记

文章目录 FlinkFlink CDC关于转换算子的解释(Transformation)Flink CDC 与 Debezium 有何关系Savepoint 和 CheckpointingSavepoint 和 Checkpointing 的区别 ![请添加图片描述](https://i-blog.csdnimg.cn/direct/8834c721df794978bde12e4e764ed946.png) Flink Flink是一个无…

windows服务管理插件 nssm

NSSM是一个windows下服务管理插件,可以填加、删除、启动、停止服务 1.下载 官网:http://nssm.cc 下载页面:http://nssm.cc/download 直接下载:http://nssm.cc/release/nssm-2.24.zip 2.食用 以填加php8.2为例 2.1.将nssm.ex…

HarmonyOS开发实战( Beta5.0)自定义装饰器实践规范

介绍 本示例介绍通过自定义装饰器在自定义组件中自动添加inspector (布局回调)方法并进行调用。 效果图预览 不涉及 使用说明 在自定义组件上添加自定义装饰器CallbackObserver,并根据参数设置对应的方法名和需要绑定的组件的ID。编译工程,可以根据…

[240912] X-CMD 发布 v0.4.10:新增 spf 模块 | 新增 gh model 功能 | advise、brew 等模块修复

目录 X-CMD 发布 v0.4.10📃Changelog✨ gh✨ spf - 终端文件管理器💡 advise📦 brew - MacOs 系统的包管理工具📂 df 💿📝 TLDR✅ 升级指南 X-CMD 发布 v0.4.10 📃Changelog ✨ gh 新增了 gh …

软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)

软考 – 软件设计师 – 二轮复习(3) – 数据结构(持续更新) 文章目录 软考 -- 软件设计师 -- 二轮复习(3) -- 数据结构(持续更新)前言一、时间、空间复杂度二、递归式时间复杂度三、线性表四、栈五、栈和队列六、串七、朴素模式匹配八、KMP模式匹配九、数组十、矩阵十一、树、二…

思路好!硕士生一作发TOP期刊!!!

2024年8月26日,福建理工大学建筑与城乡规划学院2023级城乡规划学硕士研究生岳谞攀以第一作者在国际知名期刊《Sustainable Cities and Society》在线发表题为“Constructing an urban heat network to mitigate the urban heat island effect from a connectivity p…

[网络]TCP/IP协议 之 TCP协议的核心机制(2)

文章目录 TCP核心机制1. 确认应答2. 超时重传3. 连接管理三次握手四次挥手 4. 滑动窗口5. 流量控制6. 拥塞控制7. 延时应答8. 捎带应答9. 粘包问题10. 异常情况 TCP核心机制 1. 确认应答 (上篇) 2. 超时重传 (上篇) 3. 连接管理 建立连接的流程: 三次握手 断开连接的流程…

大模型书籍丨国内顶尖院校出品,非常火爆的LLM大模型入门中文书来了

最近有一本人工智能入门的书比较火,这本书集合了最新的产品、技术,并通过顶尖院校的教授书写而成。我今天阅读了第一章,感觉浅显易懂,顺便把笔记也做出来了,供大家参考。 大语言模型入门 第一部分 背景与基础知识 第…

【小沐学OpenGL】Ubuntu环境下glad的安装和使用

文章目录 1、简介1.1 OpenGL简介1.2 glad简介 2、安装glad2.1 手动安装glad2.2 git安装glad2.3 源码编译成glad单独库 3、测试glad3.1 例子13.2 例子2 结语 1、简介 1.1 OpenGL简介 OpenGL作为图形界的工业标准,其仅仅定义了一组2D和3D图形接口API,而对…

【最新】全球各国新冠疫情数据集(2020.1-2024.8)

新冠疫情,即新型冠状病毒引发的肺炎疫情,自2019年底首次爆发以来,对全球公共卫生、经济和社会生活产生了深远影响。本次分享的是全球新冠疫情数据,世界各国的新冠疫情数据呈现出复杂多变的态势,不同国家和地区的疫情严…

【软件设计师真题】下午题第四大题---算法设计

系列文章目录 1.【软考之软件设计师】PPT课件 2.【软考之软件设计师】学习笔记 3.【软件设计师真题】下午题第一大题—数据流图设计 4.【软件设计师真题】下午题第二大题—数据库设计 5.【软件设计师真题】下午题第三大题—UML 分析与设计 6.【软件设计师真题】下午题第四…

UEFI学习笔记(八):Memory Services

UEFI学习笔记(八):Memory Services 一、内存服务概况1、PEI阶段2、DXE阶段(系统内存)3、SMM阶段 二、HOB概述1、为什么在PEI阶段要引入HOB?2、HOB的类型 三、MEMORY类型四、内存分布1、PEI内存分布2、DXE内…

上海亚商投顾:沪指探底回升 华为产业链午后爆发

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日探底回升,深成指、创业板指盘中跌逾1%,午后集体拉升翻红。华为产业链午后走强…

一天一道算法题day05

目录 合并两个有序链表 什么是链表? 链表的基本概念: Java 中的链表实现 Java 内置 LinkedList 类: 回到题目 解题思路 代码实现 总结: 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼…

【几维安全-注册_登录安全分析报告】

前言 由于网站注册入口容易被黑客攻击,存在如下安全问题: 暴力破解密码,造成用户信息泄露短信盗刷的安全问题,影响业务及导致用户投诉带来经济损失,尤其是后付费客户,风险巨大,造成亏损无底洞…

设计模式之建造者模式(通俗易懂--代码辅助理解【Java版】)

文章目录 设计模式概述1、建造者模式2、建造者模式使用场景3、优点4、缺点5、主要角色6、代码示例:1)实现要求2)UML图3)实现步骤:1)创建一个表示食物条目和食物包装的接口2)创建实现Packing接口的实体类3&a…

828华为云征文 | 深入解析华为云X实例保障云上业务安全的关键策略

前言 在云计算快速发展的背景下,安全问题一直是企业上云过程中关注的焦点。随着数据迁移至云端,企业对云计算平台的安全性能提出了更高要求,特别是如何防止数据泄露、网络攻击、以及确保合规性等问题至关重要。华为云作为全球领先的云服务提供…