我一直在寻找来源,我发现了一个像这样定义的宏:
#define STRUCT_OFFSET(tp, member) \
((off_t) (((char*)&((tp*)0)->member)-(char*)0))
我查找了off_t
,它只是long
的typedef,所以它是指针变量的基本长度。但这次转换是什么?
((char*)&((tp*)0)
这甚至意味着什么意思,为什么有零?此部分甚至如何解决(char*)0
,将指针(NULL)转换为零(NULL)?假设如果我没有宏,我就不能像int offset = &MyStruct::some_member;
那样做一些没有宏的可能吗?