C / C ++结构偏移

时间:2008-09-26 21:15:16

标签: c++ c oop

我正在寻找一段代码,可以告诉我结构中字段的偏移量而不分配结构实例。

IE:给出

struct mstct {
    int myfield;
    int myfield2;
};

我可以写:

mstct thing;
printf("offset %lu\n", (unsigned long)(&thing.myfield2 - &thing));

输出offset 4。如果没有mstct thing声明/分配一个,我怎么能这样做呢?

我知道&<struct>并不总是指向结构第一个字段的第一个字节,我可以在以后解释它。

3 个答案:

答案 0 :(得分:71)

标准的offsetof()宏(在stddef.h中)怎么样?

编辑:对于因某些原因可能没有offsetof()宏的人,您可以使用以下内容获得效果:

#define OFFSETOF(type, field)    ((unsigned long) &(((type *) 0)->field))

答案 1 :(得分:8)

是的,使用offsetof宏,(至少使用GNU CC)可用于C和C ++代码:

offsetof(struct mstct, myfield2)

答案 2 :(得分:3)

printf(“offset:%d \ n”,&amp;((mstct *)0) - &gt; myfield2);