Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

C言語の2次元配列とは?基本構文から初期化・実用例まで徹底解説

配列(アレイ)とは、関連性のある複数のデータを、共通の名前を使ってひとまとめに格納できるデータ構造です。同じ型の値を連続的に扱いたい場合に非常に便利で、C言語プログラミングの基礎となる重要な概念です。

配列の宣言構文

配列を宣言する際の基本的な構文は以下の通りです。

データ型 配列名 [サイズ];

配列の種類

C言語の配列は、大きく分けて以下の3種類に分類されます。

  • 1次元配列
  • 2次元配列
  • 多次元配列

初期化の方法

配列の初期化には、主に次の2つの方法があります。

  • コンパイル時初期化(コード内であらかじめ値を設定)
  • 実行時初期化(ユーザー入力などにより実行時に値を設定)

2次元配列とは

2次元配列は、表形式のデータを格納したい場合や、行列(マトリックス)を扱うアプリケーションなどで活用されます。行と列の2つのインデックスを持つことで、縦横の格子状にデータを配置できます。

宣言の構文

データ型 配列名 [行サイズ] [列サイズ];

記述例: int a[5][5];

たとえば a[3][3] の配列には、次のように行と列を指定してアクセスします。

a[0][0]
10
a[0][1]
20
a[0][2]
30
a[1][0]
40
a[1][1]
50
a[1][2]
60
a[2][0]a[2][1]a[2][2]

コンパイル時初期化のサンプルプログラム

以下は、宣言と同時に初期値を代入する「コンパイル時初期化」のC言語プログラムです。

#include<stdio.h>
main ( ){
   int a[3][3] = {10,20,30,40,50,60,70,80,90};
   int i,j;
   printf ("elements of the array are");
   for ( i=0; i<3; i++){
      for (j=0;j<3; j++){
         printf("%d \t", a[i] [j]);
      }
      printf("\n");
   }
}

実行結果

elements of the array are:
10 20 30
40 50 60
70 80 90

実行時初期化のサンプルプログラム

続いて、ユーザーからの入力を受け取って配列に値を格納する「実行時初期化」のプログラムです。scanf関数を使って各要素に値を読み込んでいます。

#include<stdio.h>
main ( ){
   int a[3][3] ,i,j;
   printf ("enter elements of array");
   for ( i=0; i<3; i++){
      for (j=0;j<3; j++){
         scanf("%d", &a[i] [j]);
      }
   }
   printf("elements of the array are");
   for ( i=0; i<3; i++){
      for (j=0;j<3; j++){
         printf("%d\t", a[i] [j]);
      }
      printf("\n");
   }
}

実行結果

Enter elements of array :
1 2 3 4 5 6 7 8 9
Elements of the array are
1 2 3
4 5 6
7 8 9

応用例:2つの配列の和と積を求めるプログラム

最後に、実行時に入力した2つの2次元配列A・Bについて、全要素の和(加算)と積(乗算)を計算して出力するプログラムを紹介します。二重ループを組み合わせることで、各要素ごとの演算を効率的に処理できます。

#include<stdio.h>
void main(){
   //配列の宣言(実行時初期化)//
   int A[2][3],B[2][3],i,j,sum[i][j],product[i][j];
   //forループで配列AとBに要素を読み込む//
   printf("Enter elements into the array A: \n");
   for(i=0;i<2;i++){
      for(j=0;j<3;j++){
         printf("A[%d][%d] :",i,j);
         scanf("%d",&A[i][j]);
      }
      printf("\n");
   }
   for(i=0;i<2;i++){
      for(j=0;j<3;j++){
         printf("B[%d][%d] :",i,j);
         scanf("%d",&B[i][j]);
      }
      printf("\n");
   }
   //和を計算して出力//
   printf("Sum array is : \n");
   for(i=0;i<2;i++){
      for(j=0;j<3;j++){
         sum[i][j]=A[i][j]+B[i][j];
         printf("%d\t",sum[i][j]);
      }
      printf("\n");
   }
   //積を計算して出力//
   printf("Product array is : \n");
   for(i=0;i<2;i++){
      for(j=0;j<3;j++){
         product[i][j]=A[i][j]*B[i][j];
         printf("%d\t",product[i][j]);
      }
      printf("\n");
   }
}

実行結果

Enter elements into the array A:
A[0][0] :2
A[0][1] :3
A[0][2] :1
A[1][0] :2
A[1][1] :4
A[1][2] :5
B[0][0] :1
B[0][1] :2
B[0][2] :3
B[1][0] :5
B[1][1] :6
B[1][2] :7
Sum array is :
3 5 4
7 10 12
Product array is :
2 6 3
10 24 35

まとめ

C言語の2次元配列は、「行」と「列」の2つのインデックスでデータを管理できる強力なデータ構造です。表形式のデータ処理や行列演算など、実務でも幅広く活用されています。コンパイル時初期化と実行時初期化の2つの方法を理解し、二重ループと組み合わせて自在に操作できるようになりましょう。

  1. C言語のインライン関数とは?仕組みと基本構文をわかりやすく解説

    インライン関数(inline function)とは、関数を呼び出している箇所に関数本体のコードを直接展開できるようにした関数のことです。これにより、関数呼び出しにかかるオーバーヘッドを削減できます。なお、実際にコードを展開するかどうかは、常にコンパイラが判断します。インライン関数では、関数呼び出しが実際のプログラムコードに置き換えられます。インライン関数は主に小規模な計算に使用されます。大規模な処理には適していません。インライン関数は通常の関数とほぼ同じですが、関数名の前に「inline」キーワードを付ける点だけが異なります。インライン関数の基本構文インライン関数は、以下の構文で定義します。

  2. C言語入門:ポインタと2次元配列の仕組みをわかりやすく解説

    ポインタとは、別の変数のアドレス(メモリ上の場所)を格納するための特殊な変数です。C言語において、ポインタはメモリを直接操作できる強力な機能として、効率的なプログラミングに欠かせない存在となっています。 ポインタの主な特徴 ポインタを使うことで、メモリ領域を節約できます。 メモリ上の位置へ直接アクセスできるため、実行速度が速くなります。 ポインタを利用すると、メモリの動的な割り当てと解放が可能になり、メモリを効率的に管理できます。 リンクリストやツリーなどのデータ構造と組み合わせて使われます。 ポインタと2次元配列の関係 2次元配列は、メモリ上には行ごとに連続した形で配置されます。例えば、