how to get struct's start address from its member's address

别等时光非礼了梦想. 提交于 2019-12-07 02:11:56

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!