如何计算C中两个不同结构成员之间的偏移量?

Jos*_*itt 1 c struct

考虑以下C代码:

struct Foo
{
  short a;
  long b;
  char c;
  void* d;
};
Run Code Online (Sandbox Code Playgroud)

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

Ned*_*der 6

offsetof(Foo, d) - offsetof(Foo, a)
Run Code Online (Sandbox Code Playgroud)

offsetof为您提供从开头Foo到指定成员的偏移量.

你需要 #include <stddef.h>