如何解释 #define OFFSET(struct_type, member) ((size_t) &((struct_type *) 0)->member)

解释如下:

(struct_type *) 0
把一段地址看作struct_type;

(struct_type *) 0)->member
指向它的member成员

&((struct_type *) 0)->member
取这个成员的地址

(size_t) &((struct_type *) 0)->member
把地址硬转为size_t类型

 

测试代码如下:

    • typedef struct{
    •     int x;
    •     int y;
    •     int z;
    • }Index_t;
    • typedef struct{
    •     int y;
    •     Index_t Index1;
    •     int z;
    •     Index_t Index2;
    • }Index2_t;
    • #define OFFSET(struct_type, member)   ((size_t) &((struct_type *) 0)->member)
    • printf("OFFSET Index2_t=%d/n",OFFSET(Index2_t,Index2));

    参考链接:
    http://bbs.chinaunix.net/thread-1710274-1-1.html
        • 0
          点赞
        • 2
          收藏
          觉得还不错? 一键收藏
        • 2
          评论
        评论 2
        添加红包

        请填写红包祝福语或标题

        红包个数最小为10个

        红包金额最低5元

        当前余额3.43前往充值 >
        需支付:10.00
        成就一亿技术人!
        领取后你会自动成为博主和红包主的粉丝 规则
        hope_wisdom
        发出的红包
        实付
        使用余额支付
        点击重新获取
        扫码支付
        钱包余额 0

        抵扣说明:

        1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
        2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

        余额充值