Tag: 偏移量

为什么在offsetof()中减去空指针?

Linux的stddef.h将offsetof()定义为: #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 而关于offsetof() ( http://en.wikipedia.org/wiki/Offsetof )的维基百科文章将其定义为: #define offsetof(st, m) \ ((size_t) ( (char *)&((st *)(0))->m – (char *)0 )) 为什么在维基百科版本中减去(char *)0 ? 有什么情况会真正有所作为吗?

C offsetof宏如何工作?

可能重复: 为什么这个C代码有效? 你如何在struct上使用offsetof()? 我在互联网上读到了这个偏移宏,但它没有解释它的用途。 #define offsetof(a,b) ((int)(&(((a*)(0))->b))) 它想做什么以及使用它有什么好处?