關於offsetof巨集

2021-07-25 02:30:46 字數 724 閱讀 7737

offsetof 巨集

這是在看書的時候遇到的,估計以後會用到,避免遺忘,先記下來吧。

一般形式:

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

通過((type *)0) 將0位址強制轉換為type結構型別中的指標;

通過((type *)0)->member 訪問type結構中的member成員;

通過&(((type *)0)->member)取出type結構中的member成員的位址;

通過(size_t) (&(((type *)0)->member))將結果轉換為size_t型別;

巧妙之處在於將0位址強制轉換為type結構型別的指標,type結構以記憶體空間首位址0作為起始位址,成員自然為偏移位址。

應用offsetof可以求出結構體中每個成員的偏移位址。

實現巨集offsetof

offsetof 型別,成員 返回成員偏移量 具有函式形式的此巨集返回資料結構或聯合型別型別中成員成員的偏移值 以位元組為單位 返回的值是size t型別的無符號整數值,以及指定成員與其結構開頭之間的位元組數。定義乙個結構體指標s a 未初始化的這個指標是乙個野指標 並沒有指向有效合法的記憶體空間 ...

Offsetof巨集詳解

c語言面試的時候可能會考,這樣的巨集定義 define offsetof type,member size t type 0 member 函式作用 計算結構體成員的偏移,有些自有 裡也會手寫這樣的 實際上這個函式是標準實現的。實際上如果我們瀏覽 ansi c 編譯器的標標頭檔案,將在 stddef...

offsetof巨集定義分析

type是結構體型別,member是結構體中的乙個元素的元素名 define offsetof type,member int type 0 member 拆分為以下三個個步驟 1 type 0 將type型別結構體變數的首位址變為0 個人理解將其跟陣列比較 不一定正確 把0位址強制型別轉換成乙個指...