我正在研究如何在给定结构中找到特定变量的偏移量。
我尝试了以下程序。
struct info{
char a;
int b;
char c;
int d;
};
struct info myinfo;
int main(int argc, char **argv)
{
struct info *ptr = &myinfo;
unsigned int offset;
offset = (unsigned int) &((struct info *) 0)->d;
printf("Offset = %d\n",offset);
return 0;
}
我只是想知道线路如何offset = (unsigned int) &((struct info *) 0)->d
作品。
由于取消引用 0,我感到很困惑。
它不是really解引用0
,虽然看起来像。如果在地址处取消引用,它确实需要某个成员的地址0
,假设。
这是一种肮脏的黑客行为(加上一些令人讨厌的宏东西),但它可以让你得到你感兴趣的东西(结构中成员的偏移量)。
做同样事情的更“正确”的方法是生成一个有效的对象,获取它的地址,并获取成员的地址,然后减去它们。对空指针执行相同的操作并不完美,但无需创建对象并减去任何内容即可工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)