title: How to understand "((size_t) &((TYPE *)0)->MEMBER)"?
body: <p>the codes in linux-2.6.16/include/linux/stddef.h is:</p>
  
  <pre><code> #undef offsetof
   #ifdef __compiler_offsetof
   #define offsetof(TYPE,MEMBER) __compiler_offsetof(TYPE,MEMBER)
   #else
   #define offsetof(TYPE, MEMBER) ((size_t) &amp;((TYPE *)0)-&gt;MEMBER)
   #endif
  
  #define DNAME_INLINE_LEN (sizeof(struct dentry)-offsetof(struct dentry,d_iname))
  </code></pre>
  
  <p>How to understand "((size_t) &amp;((TYPE *)0)->MEMBER)"?<br>
  Thank you</p>