核心第一巨集 offsetof詳解

2021-10-23 01:15:57 字數 674 閱讀 1755

offsetof是linux核心中乙個非常重要的巨集。它的主要作用就是求結構體重某個成員在結構體重的位置偏移。其實現如下:

#define offsetof(type, member)         \

((size_t)&((type *)0)->member)

((type *)0)->member指向結構體中member成員變數。對其取位址& ((type *)0)->member就是獲取成員變數member的記憶體位址。因為整個位址是從0位址開始的。所以其實返回的也就是member成員在type型別結構體中的偏移位址。

示例如下,簡單定義乙個結構體,獲取其中某個成員在結構體中的偏移位址。

#include 

#define offsetof(type, member)      \

((size_t)&((type *)0)->member)

struct test_s {

int arry[10];

int member;

int main(void)

printf("offsetof member: %u\n", offsetof(struct test_s, member));

return 0;

執行結果:

$ ./offsetof.exe

offsetof member: 40

Offsetof巨集詳解

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

offsetof 巨集定義的詳解

define offsetof type,member size t type 0 member 在這裡我們解釋一下這個巨集定義,0我們知道 和null 一樣的意思 但是為什莫上面的表示式可以執行,我們知道操作乙個空指標不是會segment fault 嗎?這裡就要解釋一下了 這個巨集 並不是時我們...

Spring Security 核心類詳解一

securitycontextholder 是用來儲存 securitycontext 的。securitycontext 中含有當前正在訪問系統的使用者的詳細資訊。預設情況下,securitycontextholder 將使用 threadlocal 來儲存 securitycontext,這也就...