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语言根据结构体成员变量的地址,得到结构体的地址的主要内容,如果未能解决你的问题,请参考以下文章