这是 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可能是一个结构)。