我一直在寻找很长很辛苦(最后的链接)来解释 offsetof MACRO 的实现:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
特别是取消引用NULL以获得结构中成员的偏移量。许多文章通过说 NULL 指针实际上从未真正取消引用来掩盖原因,但这对我来说没有意义。
以下是我尝试理解的一些链接:
- http://www.viva64.com/en/b/0301/
- http://www.embedded.com/design/prototyping-and-development/4024941/Learn-a-new-trick-with-the-offsetof--macro
- http://www.geeksforgeeks.org/the-offsetof-macro/
- C offsetof 宏是如何工作的?
- 取消引用 NULL 指针是否保证 C/C++ 中的程序崩溃?
我正在寻找并试图理解的是一步一步,分解了对编译器如何解释 MACRO 定义的理解,这最终将解释 NULL 指针实际上是如何被取消引用的。
编辑:尽管其他问题回答了我的问题,但正如原始帖子中所指出的那样,它们对我来说没有意义。@dasblinkenlight 的回答揭示了我对其他问题的分析所遇到的确切问题,即我们实际上如何没有取消引用指针。