【C言語】2次配列を初期化する方法

はじめに

どうも! 高杉 皆為(@MinatameT)です。

C言語で2次配列を初期化(初期値の設定)するとき……

初期化の種類
  • すべての要素を同じ値で初期化したい
  • すべての要素を異なる値で初期化したい

といった場合があると思います。

この2つのパターンについて、例を挙げながら説明していきます。

すべての要素を同じ値で初期化したい場合

#include<stdio.h>

int main(void)
{
  int score[2][3];
  int a;
  int b;

  //0で初期化(初期値の設定)
  for(a=0; a<2; a=a+1)
  {
    for(b=0; b<3; b=b+1)
    {
      score[a][b] = 0;
    }
  }

  return(0);
}

このプログラムでは、int型の2次配列scoreを0で初期化しています。

宣言時に初期化することもできるのですが、要素数が増えると(要素数に比例して)コードを記述するのが大変になってしまいます。

例えば、int a[100][100]を宣言時に初期化しようとすると、私でも数時間かかると思いますし、何より非効率的です。骨が折れますよね。

したがって、2重のfor文で要素数の分だけのループをおこない、そこで初期化をしてしまうわけです。

ただ、上記のコードを実行しても、初期化に成功しているかどうかはわかりません。

なぜなら、初期化した結果を表示していないからです。

……ということで、初期化した結果を表示するプログラムに改良しました。

#include<stdio.h>

int main(void)
{
  int score[2][3];
  int a;
  int b;

  //0で初期化(初期値の設定)
  for(a=0; a<2; a=a+1)
  {
    for(b=0; b<3; b=b+1)
    {
      score[a][b] = 0;
    }
  }

  //配列の中身の表示
  for(a=0; a<2; a=a+1)
  {
    for(b=0; b<3; b=b+1)
    {
      printf("score[%d][%d] = %d\n",a,b,score[a][b]);
    }
  }

  return(0);
}

これを実行すると、次のようになります。

score[0][0] = 0
score[0][1] = 0
score[0][2] = 0
score[1][0] = 0
score[1][1] = 0
score[1][2] = 0

ちゃんと、0で初期化できていることがわかります!

これを、0ではなく1で初期化したい場合は……

score[a][b] = 0;

この部分を、

score[a][b] = 1;

に変更すればOKです。

すべての要素を異なる値で初期化したい場合

#include<stdio.h>

int main(void)
{
  int score[2][3] = {{90,80,75},{100,85,65}}; //初期化(初期値の設定)
  
  return(0);
}

このプログラムでは、int型の2次配列scoreを各数値で初期化しています。

score[0][0]には90、score[0][1]には80、score[0][2]には75、score[1][0]には100、score[1][1]には85、score[1][2]には65が初期値として与えられています。

ただ、上記のコードを実行しても、初期化に成功しているかどうかはわかりません。

なぜなら、初期化した結果を表示していないからです。

……ということで、初期化した結果を表示するプログラムに改良しました。

#include<stdio.h>

int main(void)
{
  int score[2][3] = {{90,80,75},{100,85,65}}; //初期化(初期値の設定)
  int a;
  int b;

  for(a=0; a<2; a=a+1)
  {
    for(b=0; b<3; b=b+1)
    {
      printf("score[%d][%d] = %d\n",a,b,score[a][b]);
    }
  }

  return(0);
}

2重for文のループ内で、2次配列の値を(printf文で)表示しています。

これを実行すると、次のようになります。

score[0][0] = 90
score[0][1] = 80
score[0][2] = 75
score[1][0] = 100
score[1][1] = 85
score[1][2] = 65

初期化に成功していることがわかります!

ただ、このように要素数が少ない場合は良いのですが、要素数が多くなるとコードを記述するのが大変になります。

規則性があるのならfor文で一気に処理できるのでしょうが、不規則な値の場合は本当に大変です。気合いを入れて頑張るしかありません(汗)。

今回はここまでです。お疲れさまでした。


みなためじゃんけん

このコーナーは、私と擬似的にじゃんけんできるコーナーです。

みなためじゃんけん、じゃんけんぽん!

私が出したのは……





パーでした! チョキの勝利です!



この記事をSNSでシェアする

プログラミングカテゴリーの最新記事(5件)

最新記事(10件)

管理人のTwitter

内部リンク集