免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: xiaozhu2007
打印 上一主题 下一主题

[C] 一道C语言题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2008-09-14 23:44 |只看该作者
看list.h

论坛徽章:
0
12 [报告]
发表于 2008-09-15 11:57 |只看该作者
(char*)&(((stru*)0)->m)  这个我不知道怎么读?

我的理解:

(stru*)0 是一个指针 他的值为0 也就是指向地址为0x0的地方

然后 ((stru*)0)->m 指向 偏移量为m的地方 也就是  把m相对于0的地址取出来

那么再对它取地址是做什么呢?  &(   ((stru*)0)->m    )  

再把这个指针的地址又强制转换成 char* ?

论坛徽章:
0
13 [报告]
发表于 2008-09-15 20:31 |只看该作者
我想,楼上的->m是变量,用&取他的地址,首地址是0,取出来的就是距离了,不知道是否该这样理解。

论坛徽章:
0
14 [报告]
发表于 2008-09-15 23:14 |只看该作者
以前 雨丝风片 给解释过.你们找找以前的帖子吧.

论坛徽章:
0
15 [报告]
发表于 2008-09-16 09:18 |只看该作者
记一下,一会看看,学习学习 。

论坛徽章:
0
16 [报告]
发表于 2008-09-16 13:00 |只看该作者
原帖由 xiaozhu2007 于 2008-9-14 19:28 发表
写一个带参数宏get_struct_addr_from_member_addr(p, stru, m),

能够根据任意结构实体的某一个成员的地址,算出该结构实体的地址,其中参数p是指向该

成员的指针,stru是该结构体,m是该成员。

ps:有 ...

stru是结构体的类型。

(char*)(p)-( (char*)(& (((struct stru*)0)->m))

论坛徽章:
0
17 [报告]
发表于 2008-09-16 14:03 |只看该作者
原帖由 zzyong08 于 2008-9-14 21:49 发表


(char*)&(((stru*)0)->m),可以算出,该分量距离结构体变量首地址的距离,构思很妙,学习之




&(((stru*)0)->m)为何是偏移地址?把0当作一个正常的结构体指针就好理解了。

论坛徽章:
0
18 [报告]
发表于 2008-09-16 14:11 |只看该作者
原帖由 tian_jut 于 2008-9-16 14:03 发表




&(((stru*)0)->m)为何是偏移地址?把0当作一个正常的结构体指针就好理解了。


假设把这个结构体放在地址为0x00的地方,那变量m不就是0x00+m的偏移量么?再用p去减去这个,当然就是这个结构体在内存中的起始地址咯。

论坛徽章:
0
19 [报告]
发表于 2008-09-16 14:15 |只看该作者
这个东西 不是offset 宏吗?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
20 [报告]
发表于 2008-09-16 14:16 |只看该作者
好帖,mark一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP