在C语言中,如何从其成员的地址获得结构的开始地址?

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

ptr1 是会员的地址 member1obj1, ,如何定义
#define start_add(ptr1, type1, member1) 获取OBJ1
开始地址?

有帮助吗?

解决方案

您可以使用 offsetof:

#define start_add(ptr1, type1, member1) ((type1 *)((char *)(ptr1) - offsetof(type1, member1)))

其他提示

这是从Windows WDK

/* 
 #define CONTAINING_RECORD(address, type, field) ((type *)( \
      (PCHAR)(address) - \
      (ULONG_PTR)(&((type *)0)->field)))
*/
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top