★関数(構造体配列の受け渡し)★


構造体の配列を渡す方法とメンバ変数へのアクセスについて書きます。

まずは構造体を作ります。

typedef struct
{
    int hp;
    int mp;
} Enemy;

敵のデータということにしてみました。

敵の数は2体ということにします。

  #define ENEMY_MAX 2

これで、構造体の配列を作ります。

まずはここまで作りましょう。









































<sample program 141-01>

#include <stdio.h>

typedef struct
{
    int hp;
    int mp;
} Enemy;

#define ENEMY_MAX 2

int main(void)
{
    Enemy enemy[ENEMY_MAX];

    return 0;
}

次に構造体配列に初期値を設定します。

<sample program 140-02>

#include <stdio.h>

typedef struct
{
    int hp;
    int mp;
} Enemy;

#define ENEMY_MAX 2

int main(void)
{
    Enemy enemy[ENEMY_MAX] = {
        { 100, 50 },
        {  90, 10 },
    };

    return 0;
}

2次元配列の初期化と同じように、構造体のメンバ変数の順番にデータを用意し、配列の個数分つなげます。


関数としてステータス表示を行う「Status」関数を作りましょう。

1次元配列を受け取るので、プロトタイプ宣言はこのようになります。

void Status(Enemy enemy[ENEMY_MAX]);

本体もあわせて完成させましょう。

<sample program 141-03>

#include <stdio.h>

typedef struct
{
    int hp;
    int mp;
} Enemy;

#define ENEMY_MAX 2

void Status(Enemy enemy[ENEMY_MAX]);

int main(void)
{
    Enemy enemy[ENEMY_MAX] = {
        { 100, 50 },
        {  90, 10 },
    };

    Status(enemy);

    return 0;
}

void Status(Enemy enemy[ENEMY_MAX])
{
    int i;

    for (i = 0; i < ENEMY_MAX; i++) {
        printf("enemy %d : HP = %3d , MP = %3d\n", i, enemy[i].hp, enemy[i].mp);
    }
}

<実行結果>

enemy 0 : HP = 100 , MP =  50
enemy 1 : HP =  90 , MP =  10
続行するには何かキーを押してください・・・

構造体の配列なので、

enemy[i]

と書くことで、配列内の構造体へアクセス出来ます。

メンバ変数へのアクセスは「.」演算子を使います。

そんなに難しい考え方ではありません。


次へ

戻る

目次へ