CONTAINING_RECORD宏的作用

C++ CONTAINING_RECORD 宏操作技巧学习 C++ 的CONTAINING_RECORD宏; 阅读详情
#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;
}

 
【嵌入式面经】上海 70迈 线上笔试 “关注|点赞|收藏” 福利干货第一时间送达!最近在做免费的嵌入式知识分享,帮助对嵌入式感兴趣的同学学习嵌入式、做项目、找工作! 阅读详情

相关推荐

【域控制器EMC】域控制器EMC设计总结

汇总项目设计当中关于EMC的设计要点,主要从原理设计、Layout、结构、外设部分总结。满足要求的器件和合理的电路能降低电磁干扰;正确的布局、接地、信号路径、屏蔽等可以减少电磁辐射。结构件设计也会对EMC性能产生影响。

weixin_42098658的博客 1259

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

百里杨的博客 3413

AI 代码赋能短视频带货:服装及多赛道批量内容生产全流程实操

本文聚焦 AI 技术在短视频带货领域的落地应用,以服装赛道为核心,延伸至花卉绿植、图书、茶具等热门领域,系统拆解 AI 工具在选品、素材处理、视频制作(含动态效果、场景搭建)、运营优化等环节的实操方法。针对从业者普遍面临的 “内容生产低效”“无专业技术难出优质视频”“流量运营踩坑” 等痛点,提供从基础工具使用到高阶视频制作的全流程技术方案,助力相关从业者借助 AI 实现批量、高效的短视频内容产出。

m0_67958922的博客 3084

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

輚至消亡 1161

SMPLify-X关键点映射与OpenPose格式转换实战

本文深入解析了SMPLify-X与OpenPose之间关键点映射与格式转换的实战方法。针对SMPL、SMPL-H、SMPLX等参数化人体模型与OpenPose 2D姿态估计标准之间的数据鸿沟,文章详细对比了双方的关键点定义差异,并提供了核心的Python转换代码与映射表构建思路。通过清晰的步骤讲解与调试技巧,帮助开发者实现3D关节数据到OpenPose标准格式的高效、准确转换,为动作捕捉、3D姿态估计等应用奠定数据基础。

weixin_29046035的博客 166

Unity面试题总结

Unity面试题

sinat_34014668的博客 1万+

我对CONTAINING_RECORD宏的详细解释

tfref   宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是:    根据结构体中的某成员的地址来推算出该结构体整体的地址!  下面从一个简单的例子开始说起:  我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss;   这是一个很简单的结构...

weixin_33919941的博客 345

PaddleOCR实战:给图片‘加个框’,轻松搞定小图和长图文字识别不准的难题

本文探讨了PaddleOCR在处理小图和长图时识别精度下降的问题,并提出通过图像边框预处理技术显著提升OCR识别效果。详细介绍了使用OpenCV实现智能边框添加的方法,包括核心原理、工程实践中的关键细节以及性能优化策略,帮助开发者轻松解决非常规尺寸图像的文本检测难题。

weixin_29313547的博客 188

CONTAINING_RECORD宏的详细解释

我对CONTAINING_RECORD宏的详细解释 标签: C语言, 结构体 日期: 2013-01-07 分类: C&C++ 字号:  宏 CONTAINING_RECORD 的用处其实还是相当大的, 而且很是方便, 它的主要作用是:根据结构体中的某成员的地址来推算出该结构体整体的地址! 下面从一个简单的例子开始说起, 我们定义一个结构体, 同时类型化: typedef stru

zxy355的专栏 454

SAP FICO 银企直联实战:从配置到异常处理的全流程解析

本文详细解析了SAP FICO银企直联的实战配置与异常处理全流程,涵盖银行主数据搭建、支付类配置、银行接口适配等关键步骤。通过实际案例分享,帮助用户掌握实时付款、余额监控和自动对账等核心功能,提升企业财务效率与安全性。特别针对常见问题如凭证重复付款、前置机UUID冲突等提供了实用解决方案。

weixin_29215815的博客 663

zynq的vitis工程烧录到Winbond(华邦)型号W25Q256JVEQ的QSPI FLAHS

vitis2023.1直接支持W25Q256JVEQ。

FPGA艺术家的博客 677

CONTAINING_RECORD宏

今天看到别人的代码用了 CONTAINING_RECORD 这样的一个宏,我看了它的定义,如下: #define CONTAINING_RECORD(address, type, field) ((type *)( (PCHAR)(address) - (ULONG_PTR)(&((type*)0)->field))) class A {       char c;       in

408

移植Google Gemini Nano到RK3588 NPU,实现高效边缘推理

在嵌入式 AI 开发中,大家常常会遇到模型在硬件平台上运行时出现性能瓶颈的问题,比如推理速度慢、功耗过高,这严重影响了应用的实时性和稳定性 ,导致性能瓶颈,无法满足如智能安防、工业检测等场景的实时性需求。为了解决这些问题,我们可以将轻量模型移植到具有强大算力的硬件平台上。本文将手把手教你将 Google Gemini Nano(或类似轻量模型)移植到 RK3588 NPU,充分发挥 RK3588 NPU 的 6Tops 算力,实现高效的模型推理,提升嵌入式系统的 AI 处理能力。

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 295

Windows 经典的宏——CONTAINING_RECORD

在windows ddk中提供了一个经典的宏,其定义如下: #define CONTAININT_RECORD(address, type, field) /              ((type*)((PCHAR)(address) - (PCHAR)(&((type*)0)->field))) 这个宏用于取得内存中任何结构体的首地址,要提供的参数是:结构体中某个成员(field)的地址

mandytong的专栏 663

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

W_SX12553的专栏 638

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

experiment : how to use CONTAINING_RECORD

CONTAINING_RECORD 在应用层程序很少使用,  因为一般情况下, 都知道该结构成员所在结构的指针地址. 非回调的情况下,  一般都会传类指针或最上层的结构指针到函数. 有回调的情况下,  一般不涉及使用该结构成员父结构的问题. 使用回调的入参本身就能搞定。 用统计数据说话~, 在codeproject上搜索 CONTAINING_RECORD, 只能找到一个Demo使用

博客标题不能为空 1103

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

宏CONTAINING_RECORD学习

宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是:     根据结构体中的某成员的地址来推算出该结构体整体的地址!   下面从一个简单的例子开始说起:   我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss;   这是一个很简单的结构体, 没什

ghevinn欢迎您光临 1199

CONTAINING_RECORD IN EFI

转自:http://blog.youkuaiyun.com/hgf1011/article/details/4635888 CONTAINING_RECORD IN EFI   EFI BIOS几乎全部用C完成,它几乎将C语言的各种技巧发挥到了极致。C的精髓泰半是指针,另外宏也是非常值得称道的。程序员对于宏的评价可谓褒贬不一,有人说它是万恶之源,有人则赞其为一把利刃。我个人觉得运用之妙,存乎一心,宏不是

LifeIce的专栏 993

CONTAINING_RECORD

宏 CONTAINING_RECORD 的用处其实还是相当大的, 而且很是方便, 它的主要作用是:根据结构体中的某成员的地址来推算出该结构体整体的地址! 下面从一个简单的例子开始说起, 我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss; 这是一个很简单的结构体, 没什么特殊的, 稍微分析下该结

q563717212的专栏 218

详细分析CONTAINING_RECORD宏

 该宏的作用是:用结构成员中的ListEntry的地址(0x108)减去结构体成员ListEntry到首地址的距离(8)得到结构体首地址(0x100)     pEntry 中的值就是结构成员中的ListEntry的地址。即:0x108 ListEntry 0x108 结构成员中的ListEntry的地址,也是RemoveHeadList函

Jiangkai.net 938

宏CONTAINING_RECORD,根据成员指针获取结构体指针

宏CONTAINING_RECORD的用处其实还是相当大的, 而且很是方便, 它的主要作用是:     根据结构体中的某成员的指针来推算出该结构体的指针!   下面从一个简单的例子开始说起:   我们定义一个结构体, 同时类型化: typedef struct{ int a; int b; int c; }ss;   这是一个很简单的结构体, 没什么特殊的

u014355440的专栏 543

WDK LIST_ENTRY

使用LIST_ENTRY 在实际的编程中,我们需要自己定义链表的节点,并把节点的第一个成员设置为LIST_ENTRY类型的变量(不一定放在第一位,但通常是这样);此外,我们还需要一个LIST_ENTRY类型的链表头,用InitializeListHead来初始化链表头。 使用InsertHeadList往链表中插入节点。 InsertHeadList(&my_list_head,(PLIST

lookfuyao的专栏 670
上一篇: 一个IOCP的小例子
下一篇: 如何在一张图片中加入一个文件
冷却1987
博客等级 码龄19年 79粉丝 195原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值