offsetof 宏定義的詳解

#define offsetof(type,member) (size_t)&(((type*)0)->member) 

 在這裏我們解釋一下這個宏定義, 0我們知道 和NULL 一樣的意思 但是爲什莫上面的表達式可以運行, 我們知道操作一個空指針不是會segment fault 嗎? 

這裏就要解釋一下了 這個宏 並不是時我們想的那樣, 因爲宏是在 編譯時處理的 而指針的引用實在運行時 用的, 所以這個寫法沒問題。

(size_t)&(((type*)0)->member)  這裏要歸功與& 取地址 運算的功勞,他表示去一個地址,所以整個表達式就是 取後邊的變量的地址,在編譯時就有花了 所以根本不會在運行時 去真是的運行。所以不會錯。

而0就表示內存的其實地址也即是0x00000000 地址。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章