第二部 複雑なデータ構造

***構造体について***

ここでは構造体について説明を行います。 構造体とは複数のデータを一つのデータにまとめるためのものです。

複数のデータを一つにまとめるためには配列を第一部で学びましたが、構造体は配列ではできない異なったデータ型の変数を一つにまとめるという作業が可能になるのです。

図2-1-1を見て下さい、 ここでは構造体を用いて人物のデータを表現しています。

図2‐1-1

まず、構造体を定義するためには struct 構造体名 { 構造体のメンバ達 } といった形で定義します。

メンバとは構造体に含まれるここのデータの事です。

ここでは名前を表現するために char name[40]; 電話番号を表現するためにchar tel[20]; 住所を表現するためにchar adress[60]; 性別を表現するために(0が男、1が女)int sex; 年齢を表現するためにint age;が構造体 personal_date のメンバに当たります。

定義が終了したら、構造体変数の使用宣言をします。

これにはいくつかの方法があり、図2-1-2、2-1-3、2-1-4、等のような方法が考えられます。

図2-1-2

図2-1-3

図2-1-4

これらの使い方は、実際に構造体を使っていく時に覚えれば良い事なので、ここではこのような形があると言う程度で良いでしょう。

続いてtypedefの説明を行います。図2-1-5aを見て下さい。

図2-1-5a

typedefはこのように新しいデータ型を定義する事ができるのです。ここでは新しいデータ型 PersonalDate を定義しています。

typedefを用いる時と用いない時とでは図2-1-5a、図2-1-5bの赤字で示したような違いが出てきます。つまり変数の宣言が楽になるのです。

図2-1-5b

最後にメンバ演算子の説明を行います。

メンバ演算子には . と -> がありますが、ここでは . の説明のみを行います。図2-1-6を参照して下さい。

図2-1-6

ここでは構造体変数 a のメンバnameにTakahisa(第二部の筆者の名前です)を代入しています。

このように構造体変数のメンバにデータを代入したいと思った時には 構造体変数名.メンバ名 のように . を利用して代入を行います。もちろんメンバを参照したいと思った時もこの形を使います。

構造体を利用したプログラム(図2-1-7)を紹介します。

図2-1-7

3人分の人物データを入力してから、その3人を年齢の低い順に画面に出力していきます。

データの入力を簡単にするために構造体のメンバはnameとageだけにしておきます。また、入力はname、ageの順番で行います。

データの読み込みには例によってscanfを使用します。使い方は第一部で説明した通りです。画面への出力printfについても同様です。

また、年齢順に出力するために、if文とfor文を用いています。これらについては深い説明は必要ないでしょうから、説明はプログラムのコメント文を読んで下さい。

最後にこのプログラムで一番説明したい事はメンバ演算子の使用方法なのでそれを覚えて下さい。