简述
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;
}
输出结果: