美文网首页C/C++编程
c++中 offsetof 宏定义解析

c++中 offsetof 宏定义解析

作者: 雨幻逐光 | 来源:发表于2019-04-19 16:08 被阅读0次

    c++中的offsetof可以求取结构体中某元素的相对偏移地址。

    offsetof(TYPE, MEMBER)的宏定义如下:
    #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);

    分析如下:
    (TYPE *)0,将 0 强制转换为 TYPE 型指针,记 p = (TYPE *)0,p是指向TYPE的指针,它的值是0。那么 p->MEMBER 就是 MEMBER 这个元素了,而&(p->MEMBER)就是MENBER的地址,而基地址为0。这样就巧妙的转化为了TYPE中的偏移量。再把结果强制转换为size_t型的就OK了。这里的size_t其实就是usigned int。
    typedef __kernel_size_t size_t;
    typedef unsigned int __kernel_size_t;

    因此该宏的作用就是求出MEMBER在TYPE中的偏移量。这个在程序中有时候用到求取TYPE中某MEMBER的偏移量,但是我们又可能频繁修改我们的结构体(TYPE)时提供了方便。我们不需要在我们增加或减少结构体成员而影响到原先成员顺序时,改变程序中曾经求取对应原先成员偏移量的代码。

    相关文章

      网友评论

        本文标题:c++中 offsetof 宏定义解析

        本文链接:https://www.haomeiwen.com/subject/yifcgqtx.html