看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)的形式。
原文地址:https://www.cnblogs.com/wangshaowei/p/11505004.html
时间: 2024-10-13 02:45:45