как получить начальный адрес структуры из адреса ее члена - PullRequest
6 голосов
/ 09 января 2010

На языке C, как получить начальный адрес struct из адреса ее члена?

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

И ptr1 - это адрес члена member1 в obj1, как определить
макрос #define start_add(ptr1, type1, member1), чтобы получить obj1's
начальный адрес?

Ответы [ 2 ]

14 голосов
/ 09 января 2010

Вы можете сделать это, используя offsetof:

#define start_add(ptr1, type1, member1) ((type1 *)((char *)(ptr1) - offsetof(type1, member1)))
1 голос
/ 16 апреля 2011

это из windows wdk

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