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