関数 構造体を引数として渡す場合について https://yn0014.hatenablog.com/entry/2019/01/24/233049

関数 構造体を引数として渡す場合について https://yn0014.hatenablog.com/entry/2019/01/24/233049 int mouse_decode(struct MOUSE_DEC *mdec, unsigned char data){ このような書かれ方をしていますが 参考サイト:https://it-ojisan.tokyo/struct-func-argument/ この引数のstruct←これは必要なんですか?

C言語関連54閲覧

ベストアンサー

1

構造体を渡す話をするためには構造体をちゃんと知っていないと。 C言語においては、構造体の型名は、「struct タグ名」です(C++ではstructはなくてもOKですが)。なので、「型名」が要求される場面では関数の引数に限らず 'struct' が必要です。 typedefでは、'struct タグ名' のセットに対して新しい型名を付けるので、新しい型名にstructをつける必要はなくなります。(余談。タグ名と新しい型名が同じだったとしても、元々の型名はstruct タグ名 なので衝突しません) ついでに言っておけば、構造体を関数の引数に渡すときは構造体を新たに作成してコピーします。いわゆる値渡し。 その質問のシグニチャでは、構造体へのポインタを渡しているのであって、「構造体を渡している」のではないというのは大丈夫?

1人がナイス!しています

この返信は削除されました

ThanksImg質問者からのお礼コメント

ありがとうございました。

お礼日時:3/30 15:42

その他の回答(2件)

1

>引数のstruct←これは必要なんですか はい 必要です *** しかし、typedefすれば不要になります typedef struct MOUSE_DEC_tag{ unsigned char buf[3], phase; int x, y, btn; }MOUSE_DEC;

1人がナイス!しています