题
在C语言中,如何从其成员的地址获得结构的开始地址?
struct type1 {
//...
int member1;
//...
};
struct type1 obj1;
和 ptr1
是会员的地址 member1
在 obj1
, ,如何定义
宏 #define start_add(ptr1, type1, member1)
获取OBJ1
开始地址?
解决方案
您可以使用 offsetof
:
#define start_add(ptr1, type1, member1) ((type1 *)((char *)(ptr1) - offsetof(type1, member1)))
其他提示
这是从Windows WDK
/*
#define CONTAINING_RECORD(address, type, field) ((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))
*/
不隶属于 StackOverflow