【问题标题】:why should the APR_OFFSET op in apache source code minus the base address of null pointer [duplicate]为什么apache源代码中的APR_OFFSET op要减去空指针的基地址[重复]
【发布时间】:2012-09-20 19:36:50
【问题描述】:

可能重复:
Why subtract null pointer in offsetof()?

我在阅读apache的源代码时有一个问题。

apr_general.h中有如下定义:

#define APR_OFFSET(p_type,field) \
    ((long) (((char *) (&(((p_type)NULL)->field))) - ((char *) NULL)))

#endif /* !CRAY */

我很困惑为什么我们应该在这个操作中减去 ((char *) NULL))。

有没有人可以帮助我?

【问题讨论】:

    标签: c apache


    【解决方案1】:

    此技巧用于从结构的开头获取偏移量(整数,而不是指针)

    【讨论】:

    • 升级。太快。从结构的开头获取字段的偏移量
    • 感谢您的回复。但也许我没有说清楚。我的意思是(char *) (&(((p_type)NULL)->field))) 这里已经得到了struct p_type中字段的偏移量,但是这里为什么要减去((char *) NULL))。
    • (char*)(....) 是指向 char 的指针,而不是整数。如果从该值中减去 (char*)(NULL),则将其转换为整数值。就是这样
    • 哦,我明白了...非常感谢!
    猜你喜欢
    • 2011-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    相关资源
    最近更新 更多