• ベストアンサー

グローバルな構造体のメンバ変数のアドレスの取得

グローバルな構造体のメンバ変数のアドレスはどうやって取得したらいいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

わざわざ MacroGetOffset を作らずとも, ISO C には offsetof というマクロが既に定義されてます>#2 ということで, オフセット (構造体の先頭から当該メンバまでの距離) はこれでわかります.

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★Tacosan さんへ ・offsetof() マクロ名が思い出せなかったので、便利マクロとして紹介してしまいました。  どうも有り難うございます。

すると、全ての回答が全文表示されます。
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドレス値なの?オフセット値なの? ・下にオフセットを求める方法を紹介します。 構造体: struct tag {  char a;  short b;  int c;  long d; } tag; ●オフセットの求め方 構造体 tag のメンバ a のオフセット値(0)⇒(size_t)((size_t)&tag.a - (size_t)&tag.a) 構造体 tag のメンバ b のオフセット値(2)⇒(size_t)((size_t)&tag.b - (size_t)&tag.a) 構造体 tag のメンバ c のオフセット値(4)⇒(size_t)((size_t)&tag.c - (size_t)&tag.a) 構造体 tag のメンバ d のオフセット値(8)⇒(size_t)((size_t)&tag.d - (size_t)&tag.a) ※カッコ内は私の環境で試した結果です。→環境によって違うかもね。 ●便利マクロ関数 #define MacroGetOffset(tag,name) ((size_t)(&((tag *)0)->name)) 構造体 tag のメンバ a のオフセット値(0)⇒MacroGetOffset(struct tag,a) 構造体 tag のメンバ b のオフセット値(2)⇒MacroGetOffset(struct tag,b) 構造体 tag のメンバ c のオフセット値(4)⇒MacroGetOffset(struct tag,c) 構造体 tag のメンバ d のオフセット値(8)⇒MacroGetOffset(struct tag,d) 最後に: ・構造体のメンバ変数のアドレスなら (&tag.a) と『&』演算子を利用します。  構造体の先頭アドレスからメンバ変数までのオフセットを計算したい場合は、上記の方法や  便利マクロ関数を利用することで計算できます。上記では (size_t) にしていますが、(char)  型にキャストしても良いでしょう。 ・以上。参考に!

すると、全ての回答が全文表示されます。
  • rinkun
  • ベストアンサー率44% (706/1571)
回答No.1

普通に&で取れない? 構造体の変数名がxで、メンバ名がaなら &(x.a) で取れると思うけど。

すると、全ての回答が全文表示されます。

関連するQ&A