2012-07-23 71 views
1

考虑下面的C代码:如何计算C中两个不同结构成员之间的偏移量?

struct Foo 
{ 
    short a; 
    long b; 
    char c; 
    void* d; 
}; 

我知道这是不可能知道的sizeof使用的整个结构的大小。是否有可能知道这个结构的一个子集的大小,或者(用不同的方式)知道两个成员之间的距离?我意识到可以基于我想要的偏移量嵌套结构(然后可以使用sizeof),但是说我想知道a和d之间的字节数?此外,我想这样做,而不实例化一个对象(如sizeof)。 (我知道如果我有一个对象,那么我可以看看foo.d和foo.a之间的地址差异)。这可能吗?

+0

正确的术语是“成员”,而不是“属性”。顺便说一句,我想不出这种信息的好用途;你打算如何处理它?是否有可能发生[XY问题](http://meta.stackexchange.com/q/66377/167210)? – 2012-07-23 03:01:37

+0

@KeithThompson正式指出,谢谢。 – 2012-07-23 03:02:02

+1

@KeithThompson是的,这可能是我有一个XY问题。考虑到我原来的问题有一个答案,我会更多地考虑这个问题。这是可能的,我不需要抵消。 – 2012-07-23 03:14:39

回答

6
offsetof(Foo, d) - offsetof(Foo, a) 

offsetof让你从Foo开始到指定的成员的偏移量。

您需要#include <stddef.h>

+0

http://en.wikipedia.org/wiki/Offsetof – 2012-07-23 03:00:48

+0

完美,在stddef.h中找到 – 2012-07-23 03:01:03

+0

值得一提的是,'offsetof'是一个相当臭的宏,通常表明你正在做一些邪恶的事情。 – 2012-07-23 03:14:36

相关问题