问题
In C language, how to get struct's start address from its member's address?
struct type1 {
//...
int member1;
//...
};
struct type1 obj1;
And ptr1 is the address of member member1 in obj1, how to define
macro #define start_add(ptr1, type1, member1) to get obj1's
start address?
回答1:
You can do this using offsetof:
#define start_add(ptr1, type1, member1) ((type1 *)((char *)(ptr1) - offsetof(type1, member1)))
回答2:
this from windows wdk
/*
#define CONTAINING_RECORD(address, type, field) ((type *)( \
(PCHAR)(address) - \
(ULONG_PTR)(&((type *)0)->field)))
*/
来源:https://stackoverflow.com/questions/2033084/how-to-get-structs-start-address-from-its-members-address