(int) ((caddr_t)&((t*)0)->m))
答案:3 悬赏:40
解决时间 2021-01-25 11:56
- 提问者网友:ミ烙印ゝ
- 2021-01-24 11:39
(int) ((caddr_t)&((t*)0)->m))
最佳答案
- 二级知识专家网友:鸽屿
- 2021-01-24 13:15
获取t结构体里m成员的偏移量追问展开讲下&是寻址吗?追答首先(t*)0是假设内存地址0的位置上有一个结构体t,那么((t *)0)->m就是这个结构体的m成员。
&不是寻址(寻址是汇编领域的一个名词,并且纯属误译),是获得指向变量的指针。&((t *)0)->m就是获得我们假设的这个结构体的m成员所在的地址,因为这个结构体的起始地址是0,所以获得的地址可以看成相对结构体起始地址的偏移量。
这个时候直接转成int类型就可以了 (int)&((t *)0)->m,原来那个写的那么麻烦估计是经了多个人手的结果。另外表示指针偏移量最正确的类型应该是ptddiff_t,不过这个不是基本类型就是了。
&不是寻址(寻址是汇编领域的一个名词,并且纯属误译),是获得指向变量的指针。&((t *)0)->m就是获得我们假设的这个结构体的m成员所在的地址,因为这个结构体的起始地址是0,所以获得的地址可以看成相对结构体起始地址的偏移量。
这个时候直接转成int类型就可以了 (int)&((t *)0)->m,原来那个写的那么麻烦估计是经了多个人手的结果。另外表示指针偏移量最正确的类型应该是ptddiff_t,不过这个不是基本类型就是了。
全部回答
- 1楼网友:酒者煙囻
- 2021-01-24 14:28
是c#?
- 2楼网友:長槍戰八方
- 2021-01-24 14:08
(int) ((caddr_t)&((t*)0)->m))
从里到外看:(t*)0 就是把内存中0x0的地方强制转换成t*指针。
(t*)0)->m) 取出t指针的m成员。
&(t*)0)->m) 中&的意思是取地址,也就是取出t指针的m成员的地址。
(caddr_t)&(t*)0)->m)再把这个地址强制转换成caddr_t类型。caddr_t是地址类型,方便可移植操作。
最后再转换成int类型,得到相对结构体t的m的偏移量。
从里到外看:(t*)0 就是把内存中0x0的地方强制转换成t*指针。
(t*)0)->m) 取出t指针的m成员。
&(t*)0)->m) 中&的意思是取地址,也就是取出t指针的m成员的地址。
(caddr_t)&(t*)0)->m)再把这个地址强制转换成caddr_t类型。caddr_t是地址类型,方便可移植操作。
最后再转换成int类型,得到相对结构体t的m的偏移量。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯