免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1735 | 回复: 1
打印 上一主题 下一主题

关于指针的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-11 14:12 |只看该作者 |倒序浏览
本帖最后由 justlooks 于 2012-02-11 14:34 编辑

如下代码看不明白

  1. ((type *)((char *)(ptr) - offsetof(type, member)))
复制代码
offsetof调用是个宏,求出结构体type中member成员变量的偏移量

  1. define offsetof(type, member) ((size_t) &((type *)0)->member)
复制代码
终于弄明白了,结构体在内存中并不是挨一起放的,象char占1个字节,那么实际存放也是占4字节,如下结构
struct test {
    char mych;
    int    myint;
}

那么内存放置为

(gdb) p &test->myint
$3 = (unsigned int *) 0x804a00c
(gdb) p &test->mych
$4 = 0x804a008 "A"

也就是前面的offsetof宏求出的是在结构体中 myint之前所有成员变量的偏移量,那么当指向myint的ptr再减去 这个偏移量就得到整个结构体的开始位置。
这个在不知道结构体在myint成员变量前具体有多少成员变量情况下就可以求得结构体位置指针

论坛徽章:
0
2 [报告]
发表于 2012-02-11 14:30 |只看该作者
回复 1# justlooks


    两段代码都不完整
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP