C / C ++结构偏移

时间:2020-03-06 14:48:35  来源:igfitidea点击:

我正在寻找一段代码,该代码可以告诉我结构内某个字段的偏移量而无需分配该结构的实例。

IE:给定

struct mstct {
    int myfield;
    int myfield2;
};

我可以写:

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

并获得"偏移量4"作为输出。如果没有" mstct事物"声明/分配一个,该怎么办?

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

解决方案

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

编辑:对于由于某些原因可能没有可用的offsetof()宏的人,我们可以使用类似以下内容的效果:

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

正确,使用offsetof宏,(至少在GNU CC中)可用于C和C ++代码:

offsetof(struct mstct, myfield2)

printf(" offset:%d \ n",&((mstct *)0)-> myfield2);