C言語 2次元配列を扱えるようになるために必要な3つのこと

  • このエントリーをはてなブックマークに追加
Pocket

いきなりですが、2次元配列って扱っていますか?

2次元配列をすでに扱っているって人はこの先を読む必要はありません。

2次元配列が扱えない、そもそも1次元配列すら怪しい、配列なんて見たくもないというような人向けに、2次元配列を扱えるようになってもらうために書いていきます。

2次元配列を扱えるようになるために、まず順を追って、やっていきましょう。

1次元配列が扱えること

2次元配列をやるの前に、そもそも1次元配列が扱えなければ、2次元配列を扱うのは無理です。

まずは1次元配列を扱えるようになりましょう。

最低限、以下のプログラムを理解できなければいけません。理解できなければ、理解できるまで、何度も学習してください。

#include <stdio.h>

void main(void)
{
    int array[5] = {1, 2, 3, 4, 5};
    int i;
    int sum;

    sum = 0;
    for (i = 0; i < 5; i++) {
        sum += array[i];
    }
    printf("データ合計\n");
    printf("sum = %d\n", sum);
}

配列を宣言しているのは、わかりますよね。要素数5つでint型の配列arrayです。

そして、

array[5] = {1, 2, 3, 4, 5};

という意味はわかりますか?これは、配列の初期化です。初期化は以下のようにすることも可能です。

for (i = 0; i < 5; i++) {
    array[i] = i;
}

配列の初期化については、こちらの記事も読んでみてください。

C言語 配列の初期化の3つの方法

初期化が終わったら、次のfor文で、配列arrayの要素を全て足して、その結果をsunに代入しています。

これもわからないようっていうのであれば、同じ内容をfor文なしで書きます。

#include <stdio.h>

void main(void)
{
    int array[5] = {1, 2, 3, 4, 5};
    int i;
    int sum;

    sum = array[0] + array[1] + array[2] + array[3] + array[4];
    printf("データ合計\n");
    printf("sum = %d\n", sum);
}

これなら理解できますよね?配列の要素番号は0から始まります。要素数5の配列なので、0~4までの要素番号をしています。

array[0]には1、array[1]には2、array[2]には3、array[3]には4、array[4]には5が初期化で入っていますので、それを合計すると15ですから、sumには15が入ります。

配列の宣言、初期化、アクセス方法がわかれば、1次元配列は十分に扱えます。

他にも、以下の記事も参考に読んでみてください。

C言語 配列の要素数の求め方

C言語 配列の最大値・最小値の取得方法

2次元配列を使って慣れていくこと

1次元配列が扱えるようになったら、次は本題の2次元配列の扱いですね。

1次元配列と同様、2次元配列も宣言の仕方から、覚えましょう。とはいっても何も特殊なことはありません。

int array[2][5];

こうするだけです。単純に[]を1つ増やすだけです。何も難しくないですね。
これは、要素数5の配列を2個もつ配列であるということになります。

次に初期化ですが、宣言時に初期化する場合は、このようになります。

int array[2][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};

1つ目の配列の要素5つを初期化、2つ目の配列の要素5つを初期化していることになります。それぞれを、中カッコ{}で囲めば、その一塊が2次元目の配列要素ということになります。

ちょっとわかりにくいので、イメージで1次元配列風に書いてみます。

int array[0][5] = {1, 2, 3, 4, 5};
int array[1][5] = {6, 7, 8, 9, 10};

こんな書き方は当然エラーですが、なんとなく、おわかりになるでしょうか?array[0]とかarray[1]までを変数名だと思ってもらえば、なんとなく、わかると思います。

「もう、わかりにくいよ~。」って人は、for文で初期化処理を書いてしまえばいいのです。

#include <stdio.h>

void main(void)
{
    int array[2][5];
    int i, j;

    for (i = 0; i < 2; i++) {
        for (j = 0; j < 5; j++) {
            array[i][j] = i * 5 + j + 1;
        }
    }
}

こう書けば、

int array[2][5] = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}};

と書いて初期化したのと同じです。

for文の方法だと、初期化だけでなく、プログラムの処理の流れの中で、値を代入するときにも使えるので、覚えておくといいでしょう。

アクセスの方法ですが、1次元配列と要領は同じです。1次元目、2次元目の要素番号を指定すれば、その配列の要素を取り出したり、設定したりできます。

気をつけないといけないのは、1次元配列同様、要素数以上の要素番号を指定しないようにすることです。

今回の例では、1次元目は要素数が5、2次元目は要素数が2ですので、間違って2次元目に3以上の要素番号を指定すると、プログラムが暴走したり、強制終了したりするでしょう。

何でもそうですが、どんどん2次元配列を使って、慣れていってください。始めてだと、抵抗があるし、難しいのは当然です。

しかし、2週間くらい使い続けてみたら、自然と扱えるようになりますよ。

2次元配列を嫌がらないこと

始めは2次元配列がいやだと思います。別に、1次元配列をたくさん作って、プログラムを書いてもできるわけです。

しかし、それではいつまでたっても、プログラマーとして成長できないです。もし、3次元配列を使わないといけない場面に遭遇したらどうしますか?

それでも1次元配列でやり過ごしますか?

それでも、プログラムは書けるでしょう。ただ、効率よく、かつ、わかりやすいプログラムにはならないはずです。for文でループを回すことができなくなるからです。

2次元、3次元配列にしておけば、for文でのループを入れ子にすることで、容易にアクセスできます。

しかし、1次元配列ばかりだと、別名の配列になるため、for文は入れ子になりませんが、その分変数は膨大に増えてしまいます。10個程度ならどうにかなるかもしれません。

実際のプログラムでは、何百、何千とデータを扱うのです。そんなのいちいち書いてられません。

嫌がらずに、どんどん使っていきましょう。先ほどもいいましたが、始めは何でも難しいし、やりたくありません。でも、使い続けたらそれが当たり前になってきます。

そうなれば、2次元配列も恐れることはなくなり、プログラマーとして1つ成長できるでしょう。

まとめ

2次元配列を扱えるようになるために必要なことを書きました。2次元配列になっても、扱いは1次元配列とそう変わりません。したがって、まずは1次元配列を完璧にマスターしましょう。

したがって、まずは1次元配列を完璧にマスターしましょう。

そのあと、2次元配列に挑戦するようにしましょう。いきなり2次元配列から扱おうとしたら、絶対に混乱します。順番に習得していくことをお勧めします。

  • このエントリーをはてなブックマークに追加

コメントを残す

*