2012-07-23 38 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

相關問題