• ベストアンサー

void型のポインタで構造体の参照

void型のポインタで構造体や共用体を参照することはできますか? void *p=&kou; struct KOU kou; (struct KOU*)kou.name="名前"; のようにして構造体を参照しようとしたのですが、「左側が構造体又は共用体ではありません。」と出ます。型キャストはコンパイラに型を知らせるだけのものなのでコンパイラが構造体の型を知ることができない、ということでしょうか?void型のポインタを使って構造体(共用体)を参照することはできますか?回答よろしくお願いします。

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

  • ベストアンサー
  • mk48a
  • ベストアンサー率56% (1133/2007)
回答No.2

#1さんへの返答の通りのコードだとすると、void*で構造体を参照することはできません。 構造体をコンパイラがどのように認識しているかという話になるのですが、簡単に言うと、構造体の情報からメンバー変数の位置を計算しているので、void*だとその位置の計算ができないのです。

noname#113783
質問者

お礼

構造体は参照できないんですね。 わかりました。回答ありがとうございました!

その他の回答 (2)

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

キャストすればアクセスできます. ((struct KOU *)p)->name, ですね.

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

「やりたいこと」と「コード例」に齟齬があるように見えますが……こういう事ですか? struct KOU kou; void *p = &kou; (struct KOU *)p->name = "名前";

noname#113783
質問者

お礼

構造体とポインタを宣言する順番を質問にする時に間違えていました。 ソースコードの方は struct KOU kou; void *p=&kou; (struct KOU*)p.name="名前"; としてコンパイルしました。 あと型キャストのほうに*がついてたので勘違いして構造体演算子を使っていましたね。正しくは回答者様の通りです。

関連するQ&A