#include <stdio.h>
#include <windows.h>
typedef struct _TEST
{
char a;
int b;
short c;
}
TEST;
int main(void)
{
TEST test = {0};
void* p = NULL;
// test结构体的首地址
p = (void*)&test;
printf("0x%08x\n", (int)p);
// test结构体中c成员的地址
p = (void*)&(test.c);
printf("0x%08x\n", (int)p);
// 这个宏的目的是当我们知道某一个 C struct 内的某个field 的 address,
// 我们就可以反推回含有这个 address 的 C struct instance 的 address.
TEST* pTest = CONTAINING_RECORD(p, TEST, c);
// 通过test结构体中c成员的地址加上宏CONTAINING_RECORD的作用计算出的test结构体首地址
printf("0x%08x\n", (int)pTest);
getchar();
return 0;
}
相关推荐
【域控制器EMC】域控制器EMC设计总结
汇总项目设计当中关于EMC的设计要点,主要从原理设计、Layout、结构、外设部分总结。满足要求的器件和合理的电路能降低电磁干扰;正确的布局、接地、信号路径、屏蔽等可以减少电磁辐射。结构件设计也会对EMC性能产生影响。
CONTAINING_RECORD宏原理与使用详解
先不急着说CONTAINING_RECORD宏,我们从最浅显的代码开始讲解。 一、0指针的妙用 0指针,即nullptr、NULL,空指针,是不是很常见,一遇到它往往就是segment fault。代码,如下: struct Test { int a; float b; }; Test* pTest = nullptr; int a_value = pTest->a; // segment fault int b_value = pTest->b; // segment fau
AI 代码赋能短视频带货:服装及多赛道批量内容生产全流程实操
本文聚焦 AI 技术在短视频带货领域的落地应用,以服装赛道为核心,延伸至花卉绿植、图书、茶具等热门领域,系统拆解 AI 工具在选品、素材处理、视频制作(含动态效果、场景搭建)、运营优化等环节的实操方法。针对从业者普遍面临的 “内容生产低效”“无专业技术难出优质视频”“流量运营踩坑” 等痛点,提供从基础工具使用到高阶视频制作的全流程技术方案,助力相关从业者借助 AI 实现批量、高效的短视频内容产出。
CONTAINING_RECORD宏解析
CONTAINING_RECORD内容 这里分析一下这个CONTAINING_RECORD宏,该宏的作用是通过结构体类型内部某一成员的位置来获取该结构体的位置。结构体内容如下: // // Calculate the address of the base of the structure given its type, and an // address of a field within the structure. // #define CONTAINING_RECORD(address, t
SMPLify-X关键点映射与OpenPose格式转换实战
本文深入解析了SMPLify-X与OpenPose之间关键点映射与格式转换的实战方法。针对SMPL、SMPL-H、SMPLX等参数化人体模型与OpenPose 2D姿态估计标准之间的数据鸿沟,文章详细对比了双方的关键点定义差异,并提供了核心的Python转换代码与映射表构建思路。通过清晰的步骤讲解与调试技巧,帮助开发者实现3D关节数据到OpenPose标准格式的高效、准确转换,为动作捕捉、3D姿态估计等应用奠定数据基础。
Unity面试题总结
Unity面试题
我对CONTAINING_RECORD宏的详细解释
tfref 宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的地址来推算出该结构体整体的地址! 下面从一个简单的例子开始说起: 我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss; 这是一个很简单的结构...
PaddleOCR实战:给图片‘加个框’,轻松搞定小图和长图文字识别不准的难题
本文探讨了PaddleOCR在处理小图和长图时识别精度下降的问题,并提出通过图像边框预处理技术显著提升OCR识别效果。详细介绍了使用OpenCV实现智能边框添加的方法,包括核心原理、工程实践中的关键细节以及性能优化策略,帮助开发者轻松解决非常规尺寸图像的文本检测难题。
CONTAINING_RECORD宏的详细解释
我对CONTAINING_RECORD宏的详细解释 标签: C语言, 结构体 日期: 2013-01-07 分类: C&C++ 字号: 宏 CONTAINING_RECORD 的用处其实还是相当大的, 而且很是方便, 它的主要作用是:根据结构体中的某成员的地址来推算出该结构体整体的地址! 下面从一个简单的例子开始说起, 我们定义一个结构体, 同时类型化: typedef stru
SAP FICO 银企直联实战:从配置到异常处理的全流程解析
本文详细解析了SAP FICO银企直联的实战配置与异常处理全流程,涵盖银行主数据搭建、支付类配置、银行接口适配等关键步骤。通过实际案例分享,帮助用户掌握实时付款、余额监控和自动对账等核心功能,提升企业财务效率与安全性。特别针对常见问题如凭证重复付款、前置机UUID冲突等提供了实用解决方案。
zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS
vitis2023.1直接支持W25Q256JVEQ。
CONTAINING_RECORD宏
今天看到别人的代码用了 CONTAINING_RECORD 这样的一个宏,我看了它的定义,如下: #define CONTAINING_RECORD(address, type, field) ((type *)( (PCHAR)(address) - (ULONG_PTR)(&((type*)0)->field))) class A { char c; in
移植Google Gemini Nano到RK3588 NPU,实现高效边缘推理
在嵌入式 AI 开发中,大家常常会遇到模型在硬件平台上运行时出现性能瓶颈的问题,比如推理速度慢、功耗过高,这严重影响了应用的实时性和稳定性 ,导致性能瓶颈,无法满足如智能安防、工业检测等场景的实时性需求。为了解决这些问题,我们可以将轻量模型移植到具有强大算力的硬件平台上。本文将手把手教你将 Google Gemini Nano(或类似轻量模型)移植到 RK3588 NPU,充分发挥 RK3588 NPU 的 6Tops 算力,实现高效的模型推理,提升嵌入式系统的 AI 处理能力。
Windows 经典的宏——CONTAINING_RECORD
在windows ddk中提供了一个经典的宏,其定义如下: #define CONTAININT_RECORD(address, type, field) / ((type*)((PCHAR)(address) - (PCHAR)(&((type*)0)->field))) 这个宏用于取得内存中任何结构体的首地址,要提供的参数是:结构体中某个成员(field)的地址
OV9734 DATASHEET,完整规格书
OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
CONTAINING_RECORD 宏
winnt.h 里有这样的一个宏定义 // // Calculate the address of the base of the structure given its type, and an // address of a field within the structure. // #define CONTAINING_RECORD(address, type, field
老版QQ原生表情gif动态
这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。
experiment : how to use CONTAINING_RECORD
CONTAINING_RECORD 在应用层程序很少使用, 因为一般情况下, 都知道该结构成员所在结构的指针地址. 非回调的情况下, 一般都会传类指针或最上层的结构指针到函数. 有回调的情况下, 一般不涉及使用该结构成员父结构的问题. 使用回调的入参本身就能搞定。 用统计数据说话~, 在codeproject上搜索 CONTAINING_RECORD, 只能找到一个Demo使用
ET2012新版免狗免安装绿色软件
ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,
宏CONTAINING_RECORD学习
宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的地址来推算出该结构体整体的地址! 下面从一个简单的例子开始说起: 我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss; 这是一个很简单的结构体, 没什
CONTAINING_RECORD IN EFI
转自:http://blog.youkuaiyun.com/hgf1011/article/details/4635888 CONTAINING_RECORD IN EFI EFI BIOS几乎全部用C完成,它几乎将C语言的各种技巧发挥到了极致。C的精髓泰半是指针,另外宏也是非常值得称道的。程序员对于宏的评价可谓褒贬不一,有人说它是万恶之源,有人则赞其为一把利刃。我个人觉得运用之妙,存乎一心,宏不是
CONTAINING_RECORD
宏 CONTAINING_RECORD 的用处其实还是相当大的, 而且很是方便, 它的主要作用是:根据结构体中的某成员的地址来推算出该结构体整体的地址! 下面从一个简单的例子开始说起, 我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss; 这是一个很简单的结构体, 没什么特殊的, 稍微分析下该结
详细分析CONTAINING_RECORD宏
该宏的作用是:用结构成员中的ListEntry的地址(0x108)减去结构体成员ListEntry到首地址的距离(8)得到结构体首地址(0x100) pEntry 中的值就是结构成员中的ListEntry的地址。即:0x108 ListEntry 0x108 结构成员中的ListEntry的地址,也是RemoveHeadList函
宏CONTAINING_RECORD,根据成员指针获取结构体指针
宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是: 根据结构体中的某成员的指针来推算出该结构体的指针! 下面从一个简单的例子开始说起: 我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss; 这是一个很简单的结构体, 没什么特殊的
WDK LIST_ENTRY
使用LIST_ENTRY 在实际的编程中,我们需要自己定义链表的节点,并把节点的第一个成员设置为LIST_ENTRY类型的变量(不一定放在第一位,但通常是这样);此外,我们还需要一个LIST_ENTRY类型的链表头,用InitializeListHead来初始化链表头。 使用InsertHeadList往链表中插入节点。 InsertHeadList(&my_list_head,(PLIST
1259



被折叠的 条评论
为什么被折叠?



