理解#define offsetof(struct_t,member) ((int)&((struct_t *)0)->member)


#define offsetof(struct_t,member) ((int)&((struct_t *)0)->member)

這個東西很多人應該知道:

    offsetof是用來判斷結構體中成員的偏移位置。他是一個宏定義。

(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地址映射,然后&地址,結果二級指針都出來了。最后看了上面豁然開朗。、

不多說了:優先級鎮樓吧

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM