1

次の C コードを検討してください。

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

sizeof を使用して、構造体全体のサイズを知ることができることを知っています。この構造のサブセットのサイズを知ること、または (別の言い方をすれば) 2 つのメンバー間の距離を知ることは可能ですか? 必要なオフセットに基づいて構造をネストできることはわかっていますが (その後、sizeof を使用できます)、a と d の間のバイト数を知りたいと言いますか? また、オブジェクト (sizeof など) をインスタンス化せずにこれを行いたいと思います。(オブジェクトがある場合は、foo.d と foo.a のアドレスの違いを確認できます)。これは可能ですか?

4

1 に答える 1

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

offsetofの先頭から指定されたメンバーまでのオフセットが得られますFoo

あなたは必要になるでしょう#include <stddef.h>

于 2012-07-23T02:55:33.237 に答える