C语言根据结构体成员变量的地址,得到结构体的地址

Posted wangshaowei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言根据结构体成员变量的地址,得到结构体的地址相关的知识,希望对你有一定的参考价值。

nginx代码时发现双链表使用的是这种方法,记录一下

给出一个实例来说明

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

根据C语言对struct类型的存储特性,我们可以画这么一个图示:
技术图片
通过分析图示,我们可以看出,我们只需要把当前知道的成员变量的地址ptr,减去它在结构体当中相对偏移4就的到了结构体的地址(ptr-4)。
有两种方法可以获得成员地址偏移量

1.方法一,包含头文件#include <stddef.h>,调用函数offsetof(struct s, i)来实现。

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

以上是关于C语言根据结构体成员变量的地址,得到结构体的地址的主要内容,如果未能解决你的问题,请参考以下文章

怎样求结构体成员的偏移地址 || 结构体的 sizeof 总结

c语言中:结构体的内存分配

c语言中:结构体的内存分配

C语言结构体里的成员数组和指针

C语言结构体小白详解

结构体成员的引用方法