【整理我以前的blog】
有人考试问我题:宏定义实现 offsetof. 我没细想,就将答案 发去了
#define offsetof(s,m) (size_t)&(((s *)0)->m).
但是后来居然问我为什么?无语了。。
将英文资料找出来:
Retrieves the offset of a member from the beginning of its parent structure. size_t offsetof( structName, memberName ); Parameters structName Name of the parent data structure. memberName Name of the member in the parent data structure for which to determine the offset. Return Value offsetof returns the offset in bytes of the specified member from the beginning of its parent data structure. It is undefined for bit fields. Remarks The offsetof macro returns the offset in bytes of memberName from the beginning of the structure specified by structName. You can specify types with the struct keyword. Note offsetof is not a function and cannot be described using a C prototype.
妙在将0当指针且恰好又是首址,取地址就是偏移量了。