この章では構造体について説明します。
「構造体」はバラバラの異なる型のデータを持つ変数同士を1つの型として扱うことができます。
それに対して配列は単一のデータ型しかまとめて扱う事はできません。
例えば、学生の情報を扱いたい場合に
「成績はint型」
「身長はdouble型」
「名前はchar型」
など様々なデータ型なので配列では扱うことが出来ません。
このような時に構造体を使います。
では例をみてみましょう。
そしてstructのブロックの中にメンバ(変数や配列)の宣言をして、終わりに
メンバとは変数や配列の別名だと思ってください。
構造体の宣言は「関数の外」で宣言するとその場所から下のプログラムのすべてで使うことが出来ますが、関数の中で宣言すると関数の中でのみ使うことが出来ます。
構造体型を宣言した後は「構造体型に属する変数」を作ります。
構造体型の変数も普通の変数と同じように変数の宣言と値の代入をしなくてはいけません。
以下の基本構文が構造体型変数の宣言と初期化です。
例では以下のように書いています。
例えば
これで1が出力されます。
構造体の配列はfor文で出力しています。
次に構造体型の型名を短縮する書き方について説明します。
次の構文で書くと構造体型の型名を省略することが出来ます。
〇構造体型の宣言をする時に構造体型名の前にtypedefを付ける。
〇構造体型の変数や配列を宣言する時に
この例では
次の例では構造体でのscanfの使い方について説明します。
次の例では構造体を関数に渡す方法について説明します。
メンバの値を出力するには
次の例では構造体型のポインタを使用する方法について説明します。
ですので仮引数では以下の通り構造体型のポインタで受けています。
ここに見慣れない
アロー演算子は構造体型のポインタから構造体のメンバに
この構造体型の配列の要素にアクセスするには以下のようにポインタを進めながら書きます。この時にはアロー演算子を使います。
次の例では構造体の配列について説明します。
以下の例ではscanfを使って、入力した値を構造体の配列に入れています。
scanfの引数にあるメンバはカンマで区切れば複数書くことができます。
変換指定子もメンバの数だけ書いてください。