複数の型をまとめる

構造体の配列

MMGames

構造体の配列



構造体の配列


構造体も配列にすることが出来ます。方法は今までと同様です。
次は、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].clas);  
        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;
}
この場合は、配列を渡した時と同じような振る舞いになります。
渡された先で構造体変数の中身を変更すると呼び出し元も変更されます。

サイト目次


第0部:プログラム概要編

  1. プログラムとは何か?

2章:プログラムの書き方

  1. 書き方のルール
  2. 書き方の慣習
  3. 練習問題2

3章:画面への表示

  1. 文字列の表示
  2. 改行文字
  3. 練習問題3

6章:キーボードからの入力

  1. 入力用の関数
  2. 入力の恐怖
  3. 練習問題6

9章:回数が決まっている繰り返し

  1. 繰り返しを行う文
  2. ループ動作の仕組み
  3. 練習問題9

10章:回数がわからない繰り返し

  1. 回数不明ループ
  2. 入力チェック
  3. 練習問題10

13章:複数の変数を一括して扱う

  1. 複数の変数をまとめて扱う
  2. 配列の使い方
  3. 練習問題13

20章:複数のソースファイル

  1. 最小限の分割
  2. 分割の定石
  3. 練習問題20