6

C言語では、構造体の開始アドレスをメンバーのアドレスから取得するにはどうすればよいですか?

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

そしてptr1、のメンバーのアドレスは、member1obj1の 開始アドレスを取得するための マクロobj1を定義する方法ですか?
#define start_add(ptr1, type1, member1)

4

2 に答える 2

14

あなたはこれを使用して行うことができますoffsetof

#define start_add(ptr1, type1, member1) ((type1 *)((char *)(ptr1) - offsetof(type1, member1)))
于 2010-01-09T10:50:06.733 に答える
1

これはWindowsWDKから

/* 
 #define CONTAINING_RECORD(address, type, field) ((type *)( \
      (PCHAR)(address) - \
      (ULONG_PTR)(&((type *)0)->field)))
*/
于 2011-04-16T05:47:55.653 に答える