C語言根據結構體成員變數的位址,得到結構體的位址

2022-02-02 08:20:11 字數 382 閱讀 7481

看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...