如何从其成员的地址获取struct的起始地址

时间:2010-01-09 10:46:26

标签: c struct memory-address

在C语言中,如何从其成员的地址获取struct的起始地址?

struct type1 {
    //...
    int member1;
    //...
};
struct type1 obj1;

ptr1member1中成员obj1的地址,如何定义
#define start_add(ptr1, type1, member1)得到obj1的 开始地址?

2 个答案:

答案 0 :(得分:14)

您可以使用offsetof执行此操作:

#define start_add(ptr1, type1, member1) ((type1 *)((char *)(ptr1) - offsetof(type1, member1)))

答案 1 :(得分:1)

这来自windows wdk

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