この記事では、C言語で動的な二次元配列を作成する方法と、その要素へのアクセス方法について解説します。
さらに、静的な二次元配列との違いや、malloc関数
を使った初期化方法も紹介します。
C言語の初心者の方にとって、二次元配列の扱い方を理解するのに役立つ内容です。
malloc関数を使った動的な二次元配列のメモリ確保
動的な二次元配列を作成するためには、malloc関数
を使用してメモリを確保する必要があります。
malloc関数
は、指定したバイト数のメモリを動的に確保し、その先頭アドレスを返します。
以下のコードは、malloc関数
を使用して3行4列の二次元配列を作成する例です。
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 3;
int cols = 4;
// メモリの確保
int** array = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
array[i] = (int*)malloc(cols * sizeof(int));
}
// メモリの解放
for (int i = 0; i < rows; i++) {
free(array[i]);
}
free(array);
return 0;
}
このコードでは、int**型
のポインタarray
を宣言し、malloc関数
を使用してrows
行分のメモリを確保しています。
そして、各行ごとにcols
列分のメモリを確保しています。
動的な二次元配列の要素へのアクセス
動的な二次元配列の要素にアクセスするには、通常の二次元配列と同様に、行と列のインデックスを指定します。
以下のコードは、先ほど作成した3行4列の二次元配列に値を代入し、要素を表示する例です。
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 3;
int cols = 4;
// メモリの確保
int** array = (int**)malloc(rows * sizeof(int*));
for (int i = 0; i < rows; i++) {
array[i] = (int*)malloc(cols * sizeof(int));
}
// 値の代入
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
array[i][j] = i + j;
}
}
// 要素の表示
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
// メモリの解放
for (int i = 0; i < rows; i++) {
free(array[i]);
}
free(array);
return 0;
}
このコードでは、二重のforループを使用して、各要素に値を代入しています。
そして、再度二重のforループを使用して、各要素を表示しています。
静的な二次元配列と動的な二次元配列の違い
静的な二次元配列と動的な二次元配列の主な違いは、メモリの確保方法です。
静的な二次元配列は、コンパイル時にメモリが確保され、プログラムの実行中はそのメモリが常に存在します。
一方、動的な二次元配列は、実行時に必要量だけメモリを確保し、必要な時に解放することができます。
malloc関数を使った動的な二次元配列の初期化方法のまとめ
malloc関数
を使用して動的な二次元配列を初期化する手順は以下の通りです。
- 行数と列数を指定して、行のメモリを確保する。
- 各行ごとに列のメモリを確保する。
- 必要に応じて、各要素に値を代入する。
- メモリを解放する。
動的な二次元配列を使用する際には、メモリの確保と解放に注意する必要があります。
メモリの解放を忘れるとメモリリークが発生し、プログラムのパフォーマンスに悪影響を与える可能性があります。