码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2019-09-11 11:43:58      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:两种   cin   两种方法   成员变量   成员   padding   地址   csdn   存储   

看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语言根据结构体成员变量的地址,得到结构体的地址

标签:两种   cin   两种方法   成员变量   成员   padding   地址   csdn   存储   

原文地址:https://www.cnblogs.com/wangshaowei/p/11505004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!