C言語では、構造体の開始アドレスをメンバーのアドレスから取得するにはどうすればよいですか?
struct type1 {
//...
int member1;
//...
};
struct type1 obj1;
そしてptr1
、のメンバーのアドレスは、member1
obj1の
開始アドレスを取得するための
マクロobj1
を定義する方法ですか?#define start_add(ptr1, type1, member1)
C言語では、構造体の開始アドレスをメンバーのアドレスから取得するにはどうすればよいですか?
struct type1 {
//...
int member1;
//...
};
struct type1 obj1;
そしてptr1
、のメンバーのアドレスは、member1
obj1の
開始アドレスを取得するための
マクロobj1
を定義する方法ですか?#define start_add(ptr1, type1, member1)
あなたはこれを使用して行うことができますoffsetof
:
#define start_add(ptr1, type1, member1) ((type1 *)((char *)(ptr1) - offsetof(type1, member1)))
これはWindowsWDKから
/*
#define CONTAINING_RECORD(address, type, field) ((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))
*/