LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
12
返回列表 发新帖
楼主: haohao_h

怎样通过结构一个成员的地址求出这个结构的地址

[复制链接]
发表于 2005-9-9 18:36:49 | 显示全部楼层
http://www.linuxforum.net/forum/ ... sb=&o=&vc=1

关键在这儿:
(t *)0: 生成t类的NULL指针
((t *)0)->m: 引用类型t某实例(NULL指针所指)的成员变量m
&(((t *)0)->m): 取上述成员变量m的地址,由于使用了NULL指针,故此地址就是m在结构内的偏移量
(size_t)(...): 类型转换
回复 支持 反对

使用道具 举报

发表于 2005-9-9 19:17:31 | 显示全部楼层
Post by herberteuler
下面是那个表达式的汇编代码,其中 -12(%ebp) 是 my_demo.index,而 -4(%ebp) 是一个指针变量。
  1.         leal        -12(%ebp), %eax
  2.         movl        %eax, -4(%ebp)
复制代码

我实在是看不出什么所以然来。


kiron兄已经说的很明白了
回复 支持 反对

使用道具 举报

发表于 2005-9-9 19:37:44 | 显示全部楼层
谢谢。

ps,我觉得这种解释应该出现在给出表达式的地方;如果写表达式的人没有时间,至少也应该给出一个链接吧。这样的内容并不是很容易就能用 Google 搜索到的。
回复 支持 反对

使用道具 举报

发表于 2005-9-9 19:47:26 | 显示全部楼层
Post by herberteuler
谢谢。

ps,我觉得这种解释应该出现在给出表达式的地方;如果写表达式的人没有时间,至少也应该给出一个链接吧。这样的内容并不是很容易就能用 Google 搜索到的。


kiron 兄已经给出链接了呀
是对这个define的解释: #define offsetof(t,m) (size_t)(&(((t *)0)0->m))
回复 支持 反对

使用道具 举报

发表于 2005-9-9 19:48:51 | 显示全部楼层
呵呵,我是说也许你最初写下那个式子时就作一下哪怕是简要的说明会好一些  
回复 支持 反对

使用道具 举报

发表于 2005-9-9 20:09:08 | 显示全部楼层
Post by herberteuler
呵呵,我是说也许你最初写下那个式子时就作一下哪怕是简要的说明会好一些  


不好意思,那时候刚好有事要出去,所以匆匆写了一下,都写错了
以后一定改
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表