【问题标题】:how to get struct's start address from its member's address如何从其成员的地址获取结构的起始地址
【发布时间】:2010-01-09 10:46:26
【问题描述】:

在C语言中,如何从结构的成员地址中获取结构的起始地址?

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

ptr1obj1中成员member1的地址,如何定义
#define start_add(ptr1, type1, member1) 获取obj1的
起始地址?

【问题讨论】:

    标签: c struct memory-address


    【解决方案1】:

    您可以使用offsetof

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

    【讨论】:

    • 我认为您在(ptr1) 之前有一个额外的&ptr1 已经是会员的地址了。
    • 您还应该在整个宏结果周围添加一组额外的括号 - 请记住 -> 的优先级高于 (type),因此如果您想将 -> 应用于结果,您将需要他们。
    • @caf: 也是一个好点,因为-> 经常是接下来的内容。
    【解决方案2】:

    这个来自windows wdk

    /* 
     #define CONTAINING_RECORD(address, type, field) ((type *)( \
          (PCHAR)(address) - \
          (ULONG_PTR)(&((type *)0)->field)))
    */
    

    【讨论】:

      猜你喜欢
      • 2016-01-09
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多