這個東西不少人應該知道:spa
offsetof是用來判斷結構體中成員的偏移位置。他是一個宏定義。3d
(struct_t *)0是一個指向struct_t類型的指針,其指針值爲 0,因此其做用就是把從地址 0 開始的存儲空間映射爲一個 struct_t 類型的對象。((struct_t *)0)->member 是訪問類型中的成員 member,相應地 &((struct_t *)0)->member) 就是返回這個成員的地址。因爲對象的起始地址爲 0,因此成員的地址其實就是相對於對象首地址的成員的偏移地址。而後在經過類型轉換,轉換爲 size_t 類型(size_t通常是無符號整數)。
因此,offsetoff(struct_t,member)宏的做用就是得到成員member在類型struct_t中的偏移量。我的認爲其中的 (char *) 能夠省略指針
看來上面的內容你可能已經懂了,也不是很難,但我陷入了誤區:優先級的問題,我錯誤的認爲是先把0地址映射,而後&地址,結果二級指針都出來了。最後看了上面豁然開朗。、對象
很少說了:優先級鎮樓吧blog