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


看nginx代碼時發現雙鏈表使用的是這種方法,記錄一下

給出一個實例來說明

struct father_t {
    int a;
    char *b;
    double c;
}f;
char *ptr = &(f.b);
//而不是 ptr = f.b; 這里ptr是b的地址,而不是它指向的地址。

根據C語言對struct類型的存儲特性,我們可以畫這么一個圖示:
container_of
通過分析圖示,我們可以看出,我們只需要把當前知道的成員變量的地址ptr,減去它在結構體當中相對偏移4就的到了結構體的地址(ptr-4)。
有兩種方法可以獲得成員地址偏移量

1.方法一,包含頭文件#include <stddef.h>,調用函數offsetof(struct s, i)來實現。

2、方法二,使用&(((s1*)0)->i)的形式。


免責聲明!

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



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