構造体も配列にすることが出来ます。方法は今までと同様です。
次は、student型で10個の要素を持つ構造体変数の配列を宣言する例です。
使い方も、これまでの配列と全く同じです。student data[10];
そのほかの点も、これまでの配列の使い方と同様です。data[1].year = 3; strcpy(data[1].name,"MARIO");
[ 別の書き方 ]
構造体の配列があることを利用すれば、前項で説明した以外の書き方も出来ます。
すなわち、次の3つは同じ意味になるのです。
この書き方は、配列になっていない構造体ポインタ型変数でも使えます。(*data).year data->year data[0].year
しかし、いずれも面倒なので、やめた方が無難です。
ところで、この3つが全く同じ意味であることを説明するには、
構造体とポインタの仕組みをしっかり理解している必要があります。
皆さんの教師や上司に質問してはいかがですか?
これが説明出来ないようではちょっと・・・。
構造体配列を引数にして関数に渡すことも出来ますが、
その場合には、これまでの配列のような渡し方になります。
すなわち、構造体配列の最初の要素のアドレスを渡す形になります。
受け取った関数では、今までの配列の引数と同様に扱えます。
次の関数は、指定された数だけstudent型の中身を表示します。
この場合は、配列を渡した時と同じような振る舞いになります。void student_print(student data[],int count) { int i; for (i = 0;i < count;i++) { printf("[学年]:%d\n",data[i].year); printf("[クラス]:%d\n",data[i].class); printf("[出席番号]:%d\n",data[i].number); printf("[名前]:%s\n",data[i].name); printf("[身長]:%f\n",data[i].stature); printf("[体重]:%f\n",data[i].weight); } return; }