WIN宏CONTAINING_RECORD

#define CONTAINING_RECORD(address, type, field) ((type *)( \
    (PCHAR)(address) - \
    (ULONG_PTR)(&((type *)0)->field)))

用于取得内存中任何结构体的首地址,要提供的参数是:结构体中某个成员(field)的地址address、结构体的类型type、提供地址那个成员的名字field。

(ULONG_PTR)(&((type *)0)->field)),它表示结构体type的field字段相对type首地址的内存地址偏移量,
也可以如此理解:结构体首地址从0开始数,field的偏移就是(ULONG_PTR)(&((type *)0)->field))

type结构体的field字段的地址减去field字段在结构体中的偏移。就是结构体的首地址

上一篇:CSS中绝对定位导致页面混乱的原因以及解决办法


下一篇:[LeetCode] 1358. Number of Substrings Containing All Three Characters