• ベストアンサー

構造体について

プログラムを勉強し始めて3日目の初心者なんですが、構造体を使う意味がいまいちよくわかりません。 たとえば、構造体の定義が { 縦の長さ 横の長さ 重さ } だとしたら、それを使うためにも { 縦の長さ= a 横の長さ= b 重さ= c } と同じものを2回書く必要があり、なんだか冗長な感じがしてしまいます。 それとも、定義で決めたデータをわかりやすく、間違えないようにするためですか? 本当に未熟で仕組みや使い方もわからない自分の質問なのですが、答えていただければうれしいです。

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

関連のあるデータを1個にまとめると取り扱いが楽になります 関数の引数に渡す場合も別々に複数の引数を渡すより1個の構造体で渡すとすっきり見えますし 例えば画面の座標を表すRECTという構造体を作って typedef struct tagRECT { int left; int top; int right; int bottom; } RECT; で RECT img; img.left = 10; img.top = 20; img.right = 100; img.bottom = 200; DrawBox( img ); // 4角形を書く関数のつもり とするのと別々の変数で int x1, y1, x2, y2; x1 = 10; y1 = 20; x2 = 100; y2 = 200; DrawBox( x1, y1, x2, y2); とそんなに冗長ではないと思います 例ではメンバの数が4個なので別々にしてもそれほど気になりませんが WindowsのSDKという開発環境ではメンバの数が10個以上ある構造体がごろごろしています(OPENFILENAMEという構造体は23個のメンバを持っています) これを構造体でなく全部ばらばらの変数でやったら関数1回呼び出すだけで死ねます

FooAll
質問者

お礼

構造体が本領発揮できるのはほかの関数を使うときということでしょうか。

その他の回答 (4)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.5

#1です。 どのあたりがわからないですか? 構造体であるかどうかにかかわらず、 変数に対しては定義、代入、参照のような 同種の操作を行います。 構造体に対して冗長だと感じられた点は 構造体でない変数に対しても冗長だと感じられるのでは ありませんか? というのが回答の趣旨です。

FooAll
質問者

お礼

わざわざありがとうございます。 自分の勘違いにて、冗長に感じていたようです。 いろいろと使い方を考えると、とても便利ですね。

  • Tasuke22
  • ベストアンサー率33% (1799/5383)
回答No.4

データベース的に捉えると、レコードとそのレコー ド内のデータですかね。 レコード単位で処理が必要な場合に便利です。

FooAll
質問者

補足

少しずつですが解ってきたように思います。

  • ttschool
  • ベストアンサー率28% (18/64)
回答No.2

もうちょっと、勉強を進めれば分かるはずですよ。 まずは、自分でがんばって。

FooAll
質問者

お礼

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

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.1

>たとえば、構造体の定義が >{ >縦の長さ >横の長さ >重さ >} >だとしたら、それを使うためにも > >{ >縦の長さ= a >横の長さ= b >重さ= c >} >と同じものを2回書く必要があり、なんだか冗長な感じがしてしまいます。 そのお考えに従うと、 たとえば、変数の定義が 縦の長さ 横の長さ 重さ だとしたら、それを使うためにも 縦の長さ= a 横の長さ= b 重さ= c と同じものを2回書く必要があり、なんだか冗長な感じがしてしまいます。 ということにもなりませんか?

FooAll
質問者

お礼

申し訳ないですが、いまいちよく解りませんでした。