No.3ベストアンサー
- 回答日時:
わざわざ MacroGetOffset を作らずとも, ISO C には offsetof というマクロが既に定義されてます>#2
ということで, オフセット (構造体の先頭から当該メンバまでの距離) はこれでわかります.
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)
型にキャストしても良いでしょう。
・以上。参考に!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- FTTH・光回線 グローバルIPアドレスの変更について 1 2022/04/23 05:32
- C言語・C++・C# C言語 2 2022/07/21 00:02
- VPN 接続のたびにIPが変わるVPNサービスが知りたい 2 2022/06/27 02:34
- OCN光 OCN光と契約している方いますか? 2 2022/04/20 17:59
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- 固定IP グローバルIPアドレス 4 2022/04/22 15:56
- ネットワーク 外部からローカルIPアドレスはわかる? 3 2022/07/05 00:53
- Wi-Fi・無線LAN ネットワークに関する質問です。現在、有線ルーターと無線ルーターを使用しております。 4 2023/07/13 23:04
- ネットワーク 例えば192.168.1.10はプライベートIPアドレスで合っていますか? 3 2022/07/05 01:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
EXCELマクロでのThisisWor...
-
Excel マクロ VBA プロシー...
-
【マクロ】1つのマクロの中に...
-
10人を2人づつ5組にランダ...
-
TERA TERMを隠す方法
-
ExcelVBAでPDFを閉じるソース
-
アクセスで作成したマクロの印...
-
エクセルで別のセルにあるふり...
-
エクセル マクロで奇数行の非表示
-
エクセル マクロ 指定日の指定...
-
Excel VBAからAccessマクロを実...
-
特定文字のある行の前に空白行...
-
2つのマクロでチェックボックス...
-
エクセルに張り付けた写真のフ...
-
EXCELのVBAでRange("A1:C4")を...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excel・Word リサーチ機能を無...
-
特定のPCだけ動作しないVBAマク...
-
エクセルで特定の列が0表示の場...
-
Excel マクロ VBA プロシー...
-
メッセージボックスのOKボタ...
-
一つのTeratermのマクロで複数...
-
エクセルで別のセルにあるふり...
-
ExcelのVBA。public変数の値が...
-
エクセルに張り付けた写真のフ...
-
ExcelVBAでPDFを閉じるソース
-
EXCELのVBAでRange("A1:C4")を...
-
Excel VBAからAccessマクロを実...
-
TERA TERMを隠す方法
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
マクロ実行時、ユーザーフォー...
-
Excelのマクロについて教えてく...
-
ソース内の行末に\\
おすすめ情報