简述

offsetof(type, member)

返回成员的偏移量,具有函数形式,返回数据结构或联合类型中成员的偏移量(以字节为单位);返回的值是size_t类型的无符号整数值以及指定成员与结构开头之间的字节数。

宏实现

简单说明一下,该宏是如何实现的。

#define offsetof(type, member) (size_t)&(((type*)0)->member)

将地址0强制转换为type类型的指针,从而定位到member在结构体中的偏移位置。编译器认为0是一个有效地址,从而认为0是type指针的起使地址。

示例

#include <stdio.h>
#include <stddef.h>

struct foo
{
    char a;
    char b[10];
    char c;
};

int main(int argc, char const *argv[])
{
    printf("offset(a): %d\n", offsetof(struct foo, a));
    printf("offset(b): %d\n", offsetof(struct foo, b));
    printf("offset(c): %d\n", offsetof(struct foo, c));
    return 0;
}

输出结果:
输出结果

最后修改:2019 年 05 月 06 日 02 : 15 PM