我正在研究在给定结构中如何找到特定变量的偏移量.

我尝试了以下程序.

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,我很困惑.

解决方法:


虽然看起来像它,但它并没有真正解除引用0.如果某个成员的地址在地址0处被取消引用,那么它确实需要一个成员的地址.

这是一种肮脏的黑客(加上一些令人讨厌的宏内容),但它会让你感兴趣的是(结构中成员的偏移量).

做同样事情的更“正确”的方法是生成有效对象,获取其地址,并获取成员的地址,然后减去这些.使用空指针执行相同操作并不是很好,但可以在不创建对象和减去任何内容的情况下工作.

标签: linux

相关文章推荐

添加新评论,含*的栏目为必填