在 C 语言中,如何从其成员的地址中获取结构的起始地址?
struct type1 {
//...
int member1;
//...
};
struct type1 obj1;
并且ptr1
是成员的地址member1
,obj1
如何定义
宏#define start_add(ptr1, type1, member1)
来获取obj1的
起始地址?
在 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)))
*/