c – Linux中使用的Offsetof教程
我正在研究在给定结构中如何找到特定变量的偏移量.
我尝试了以下程序.
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处被取消引用,那么它确实需要一个成员的地址.
这是一种肮脏的黑客(加上一些令人讨厌的宏内容),但它会让你感兴趣的是(结构中成员的偏移量).
做同样事情的更“正确”的方法是生成有效对象,获取其地址,并获取成员的地址,然后减去这些.使用空指针执行相同操作并不是很好,但可以在不创建对象和减去任何内容的情况下工作.