看nginx**時發現雙鏈表使用的是這種方法,記錄一下
給出乙個例項來說明
struct father_t f;
char *ptr = &(f.b);
//而不是 ptr = f.b; 這裡ptr是b的位址,而不是它指向的位址。
根據c語言對struct型別的儲存特性,我們可以畫這麼乙個圖示:
通過分析圖示,我們可以看出,我們只需要把當前知道的成員變數的位址ptr,減去它在結構體當中相對偏移4就的到了結構體的位址(ptr-4)。
有兩種方法可以獲得成員位址偏移量
1.方法一,包含標頭檔案#include ,呼叫函式offsetof(struct s, i)來實現。
2、方法二,使用&(((s1*)0)->i)的形式。
C語言 結構體變數位址
includetypedef struct student stu intmain 陣列名 陣列位址 陣列第乙個元素的位址 陣列第乙個元素的第乙個成員的位址 printf 張三位址 d n edu printf 張三位址 d n edu printf 張三位址 d n edu 0 printf 張三...
通過成員變數位址獲取結構體位址
linux中有乙個巨集 define container of ptr,type,member 實現略實現了通過成員變數位址獲取結構體位址的功能。今天我想好好想想這個實現的原理是怎麼來的。先定義乙個結構體吧 typedef struct abc 再來設計乙個函式用來實現功能 int main voi...
結構體成員位址獲得結構體起始位址
經常我們在一些開源的或者核心 中會看到。define type struct ptr type member type char ptr unsigned long type 0 member 就是由結構體的成員位址獲得結構體的位址。引數 ptr 結構體的某個成員位址。type 結構體名 membe...