其他分享
首页 > 其他分享> > WIN宏CONTAINING_RECORD

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字段在结构体中的偏移。就是结构体的首地址

标签:CONTAINING,ULONG,RECORD,WIN,field,地址,type,PTR,结构
来源: https://www.cnblogs.com/lcinx/p/10568857.html