offsetof(TYPE, MEMBER)

offsetof(TYPE, MEMBER)
該宏在Linux內核代碼(版本2.6.22)中定義如下:
#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER);
 
分析:
(TYPE *)0,將 0 強制轉換爲 TYPE 型指針,記 p = (TYPE *)0,p是指向TYPE的指針,它的值是0。那麼 p->MEMBER 就是 MEMBER 這個元素了,而&(p->MEMBER)就是MENBER的地址,而基地址爲0,這樣就巧妙的轉化爲了TYPE中的偏移量。再把結果強制轉換爲size_t型的就OK了,size_t其實也就是int。
typedef __kernel_size_t  size_t;
typedef unsigned int __kernel_size_t;   
 
可見,該宏的作用就是求出MEMBER在TYPE中的偏移量。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章