プログラミング · 1 min read · Nov 19, 2025

Linux Cプログラミングチュートリアル パート24 - 多次元配列

もしこの継続中のCプログラミングチュートリアルシリーズをフォローしているなら、配列の概念についてはご存知でしょう。簡単に復習すると、配列は同じ型の複数の値を連続したストレージに保存するために使用されます。

Cにおける多次元配列

例えば、以下は5つの数値を保存できる整数配列です。

int arr[5]

配列に保存された任意の値は、配列名と対応するインデックス値を使用して簡単にアクセスできます。インデックスは0から始まるため、配列の2番目の要素にアクセスしたい場合、次のようにできます。

arr[1]

以下のプログラムは、ユーザーから5つの整数を入力として受け取り、それらを配列に保存し、再びユーザーに出力します。

#include   
  
int main()  
{  
 int arr[5],i;  
   
 printf("5つの整数値を入力してください\n");  
   
 for(i=0;i<5;i++)  
 scanf("%d",&(arr[i]));  
   
 printf("以下の値を入力しました:\n");  
   
 for(i=0;i<5;i++)  
 printf("%d\n",arr[i]);  
   
  
 return 0;  
}

さて、このタイプの配列は一次元配列として知られています。はい、つまり多次元配列も存在します - 二次元配列、三次元配列、などです。例えば、以下は二次元配列です。

int arr[2][3]

この配列は、2行3列の数値の2次元テーブルとして視覚化できます - 次のようなものです。

x x x  
x x x 

この配列は合計6つの要素を保持できます。配列が保持できる要素の総数は、配列の宣言におけるインデックスを掛け算することで簡単に計算できます。例えば、’arr’の場合、配列の容量は2x3で計算でき、6になります。

初期化の部分に移ると、’arr’のような2次元配列は次のように初期化できます。

int arr [2][3] = {1,2,3,4,5,6}

上記の初期化は、これらの値を2次元配列で視覚化するのが難しいため、別の(より良い)方法を選択できます。こちらです:

int arr [2][3] = { {1,2,3}, {4,5,6} };

これで、1,2,3が1行にあり、4,5,6が別の行にあることが簡単に視覚化できます。こちらです:

1 2 3  
4 5 6

Cでの2次元配列の扱い方については、以下の小さなプログラムが、ユーザーからこれらの6つの値を受け取り、2次元配列’arr’に保存し、最終的にユーザーに出力します。

#include   
  
int main()  
{  
   int arr[2][3],i,j;  
   
   printf("2x3配列の値を入力しようとしています\n");  
   
   for(i=0;i<2;i++)  
   {  
     for(j=0;j<3;j++)  
     {  
       printf("\n 行%d 列%dに保存する値を入力してください :: ",i,j);  
       scanf("%d",&arr[i][j]);  
     }  
   }  
   
   printf("\n 以下の値を入力しました:\n");  
   
   for(i=0;i<2;i++)  
   {  
     for(j=0;j<3;j++)  
     {  
       printf("\n 行%d 列%d = %d\n",i,j,arr[i][j]);  
     }  
   }  
   
  
   return 0;  
}

そして、出力は以下の通りです:

2x3配列の値を入力しようとしています   
   
 行0 列0に保存する値を入力してください :: 1   
   
 行0 列1に保存する値を入力してください :: 2   
   
 行0 列2に保存する値を入力してください :: 3   
   
 行1 列0に保存する値を入力してください :: 4   
   
 行1 列1に保存する値を入力してください :: 5   
   
 行1 列2に保存する値を入力してください :: 6   
   

以下の値を入力しました:   
   
 行0 列0 = 1   
   
 行0 列1 = 2   
   
 行0 列2 = 3   
   
 行1 列0 = 4   
   
 行1 列1 = 5   
   
 行1 列2 = 6

これが二次元配列に関する基本的な情報でした。三次元配列はどうでしょうか?同じように、三次元配列を定義し初期化することもできます。以下はその例です:

int arr[2][3][4]

この配列を視覚化するにはどうすればよいでしょうか?三次元の世界(私たちが住んでいる世界)を考え、互いに直交する三次元を視覚化してください。これがこの配列の三次元がどのようにフィットするかです。

24要素(2x3x4)の容量を持つこの配列は、次のように初期化できます。

int x[2][3][4] =  
 {  
   { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} },
   { {13,14,15,16}, {17,18,19,20}, {21,22,23,24} }
 };

そして、以下は3次元配列を使用したCプログラムです:

#include   
  
int main()  
{  
   int arr[2][3][4],i,j,k;  
   
   printf("2x3x4配列の値を入力しようとしています\n");  
   
   for(i=0;i<2;i++)  
   {  
     for(j=0;j<3;j++)  
     {  
       for(k=0;k<4;k++)  
       {  
          printf("\n arr[%d][%d][%d]に保存する値を入力してください :: ",i,j,k);  
          scanf("%d",&arr[i][j][k]);  
       }  
     }  
   }  
   
 printf("\n 以下の値を入力しました:\n");  
   
   for(i=0;i<2;i++)  
   {  
     for(j=0;j<3;j++)  
     {  
       for(k=0;k<4;k++)  
       {  
          printf("\n arr[%d][%d][%d] = %d\n",i,j,k,arr[i][j][k]);  
       }  
     }  
   }  
   
  return 0;  
}

結論

このチュートリアルでは、配列の既存の理解を拡張し、多次元配列の概念について説明しました。このチュートリアルで使用された例をあなたのシステムで試してみること(新しいものを作成することも)をお勧めします。これらの配列がどのように機能するかをよりよく理解するために。疑問や質問がある場合は、下にコメントを残してください。

Share: X/Twitter LinkedIn

新しい投稿を受信箱で受け取る

スパムはありません。いつでも購読を解除できます。