dポイントプレゼントキャンペーン実施中!

void型のポインタで構造体や共用体を参照することはできますか?

void *p=&kou;
struct KOU kou;
(struct KOU*)kou.name="名前";

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

A 回答 (3件)

#1さんへの返答の通りのコードだとすると、void*で構造体を参照することはできません。


構造体をコンパイラがどのように認識しているかという話になるのですが、簡単に言うと、構造体の情報からメンバー変数の位置を計算しているので、void*だとその位置の計算ができないのです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2009/07/31 22:01

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

    • good
    • 0

「やりたいこと」と「コード例」に齟齬があるように見えますが……こういう事ですか?



struct KOU kou;
void *p = &kou;
(struct KOU *)p->name = "名前";
    • good
    • 0
この回答へのお礼

構造体とポインタを宣言する順番を質問にする時に間違えていました。
ソースコードの方は

struct KOU kou;
void *p=&kou;
(struct KOU*)p.name="名前";

としてコンパイルしました。
あと型キャストのほうに*がついてたので勘違いして構造体演算子を使っていましたね。正しくは回答者様の通りです。

お礼日時:2009/07/31 21:37

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!