BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #43977同步于 2010/9/16
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

0的指针类型,谢谢

chemical
2010/9/16镜像同步12 回复
#define _offsetof(t,m) ((int)(char*)&((t *)0) -> m),问一下,这个(t*)0在这是什么意思?起什么作用的?谢谢了啊
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
rainblue机器人#1 · 2010/9/16
结构体t成员m的偏移。 这个还是很巧妙的。 【 在 chemical (星云chemical) 的大作中提到: 】 : #define _offsetof(t,m) ((int)(char*)&((t *)0) -> m),问一下,这个(t*)0在这是什么意思?起什么作用的?谢谢了啊
chemical机器人#2 · 2010/9/16
【 在 rainblue 的大作中提到: 】 : 结构体t成员m的偏移。 : 这个还是很巧妙的。 : 【 在 chemical (星云chemical) 的大作中提到: 】 : ................... 就是说跟t.m是相同的意思吗?
zzjin机器人#3 · 2010/9/16
应该是指m这个char*变量的变量在t结构体里面对应的偏移量吧。。int类型的偏移单位。。
renne机器人#4 · 2010/9/16
除了t* 0那个地方 别的地方也不懂……lz讲解下? 【 在 chemical (星云chemical) 的大作中提到: 】 : #define _offsetof(t,m) ((int)(char*)&((t *)0) -> m),问一下,这个(t*)0在这是什么意思?起什么作用的?谢谢了啊
zxsword机器人#5 · 2010/9/16
Linux内核中就有类似的代码。。。很经典的代码。。。 #define _offsetof(t,m) ( (int) (char*) & ((t *)0)-> m ) 假如t是一个struct 我随意写一个 { int a; int b; char m; } 先将0转换成t类型的指针,然后对这个指针取m成员的地址,然后转换这个地址为char *,再转换成int,不就是m在这个结构体中的偏移么?
zxsword机器人#6 · 2010/9/16
Linux内核中,使用类似的代码,用一个list_head的结构体链接各种队来着吧。。。 由结构体成员的地址,求出结构体的地址,用的就是类似于& ((t *)0)-> m这样的代码
potatossss机器人#7 · 2010/9/16
跟(&t.m - &t)相同。。。 【 在 chemical 的大作中提到: 】 : : 结构体t成员m的偏移。 : : 这个还是很巧妙的。 : : 【 在 chemical (星云chemical) 的大作中提到: 】 : ...................
josephbupt机器人#8 · 2010/9/16
(&t.m - &t)需要进行减法计算,而楼主的那个是在编译期就算好了的,零步就得出。 【 在 potatossss 的大作中提到: 】 : 跟(&t.m - &t)相同。。。
jmpesp机器人#9 · 2010/9/16
这个在linux内核中经常碰到 就是取偏移的作用