offsetof(TYPE, MEMBER)
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);
分析:
========================================================================
(TYPE *)0, 將0強制轉型為TYPE型態指標,
p = (TYPE *)0, p是指向TYPE的指標, 值為0.
p->MEMBER就是MEMBER這個元素了, 而&(p->MEMBER)就是MEMBER的位址, 其base address是0, 如此一來就巧妙的轉化為TYPE中的偏移量. 再把結果強制轉換為size_t 就ok了, size_t 其實就是int.
typedef __kernel_size_t size_t;
typedef unsigned int __kernel_size_t;
可見 offsetof 的作用就是求出MEMBER在TYPE中的偏移量.
Reference: http://blog.csdn.net/sfrysh/article/details/5761148
沒有留言:
張貼留言