这是 stddef.h 中的一系列宏之一。
#define offsetof(s,m) (size_t)&(((s *)0)->m)
(s *)0 是什么意思?
这是一种编写NULL
类型指针的方法pointer-to-s
。通过获取地址为 0 的m
成员的s
地址,您可以得到在 中的偏移m
量s
。
这是一个类型转换,转换0
为pointer to s
.
这是对s
指针的强制转换。s
在这种情况下,是宏的一个参数,希望是类型名称。
创建类型s
和第 i 个值为零 (null)的指针
s 在这里应该是类型名称,例如int
, 所以(s*)0
基本上是转换0
为指针类型。
0
不仅是整数零,而且是空指针。因此((S*)0)
将空指针转换为指向的指针s
(其中s
可能是一个结构)。