C言語の多次元配列
目次
多次元配列とは
多次元配列とは、配列の中にさらに配列を含む構造のことを指します。C言語では、一般的に二次元配列や三次元配列が使用されます。
二次元配列
二次元配列は「行」と「列」からなる配列です。宣言の基本形は以下の通りです。
int matrix[3][4]; // 3行4列の二次元配列
この配列には3×4=12個の整数を格納できます。
二次元配列の初期化
二次元配列の初期化方法にはいくつかの方法があります。
方法1: すべての要素を明示的に指定
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
方法2: 内部の波括弧を省略
int matrix[3][4] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
二次元配列の要素へのアクセス
二次元配列の要素にアクセスするには、行と列のインデックスを指定します。
#include <stdio.h>
int main() {
int matrix[3][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
printf("%d\n", matrix[1][2]); // 7を出力
return 0;
}
三次元配列
三次元配列は「高さ × 行 × 列」という構造を持ちます。以下のように宣言できます。
int cube[2][3][4]; // 2×3×4の三次元配列
三次元配列の使用例
三次元配列を使うと、例えば3D空間のデータを格納できます。
#include <stdio.h>
int main() {
int cube[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}
}
};
printf("%d\n", cube[1][2][3]); // 24を出力
return 0;
}
ポインタと多次元配列
多次元配列はポインタを使ってアクセスすることも可能です。
#include <stdio.h>
int main() {
int matrix[2][3] = {
{1, 2, 3},
{4, 5, 6}
};
int (*ptr)[3] = matrix; // 3要素の配列へのポインタ
printf("%d\n", ptr[1][2]); // 6を出力
return 0;
}
動的な多次元配列
動的に多次元配列を確保するには、mallocを使います。
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 3, cols = 4;
int **matrix = (int **)malloc(rows * sizeof(int *));
for (int i = 0; i < rows; i++) {
matrix[i] = (int *)malloc(cols * sizeof(int));
}
// 値を代入
matrix[1][2] = 7;
printf("%d\n", matrix[1][2]); // 7を出力
// メモリ解放
for (int i = 0; i < rows; i++) {
free(matrix[i]);
}
free(matrix);
return 0;
}