[C言語] 2次元配列の要素を全て0で初期化する方法を解説
C言語で2次元配列を全て0で初期化する方法は、配列を宣言する際に初期化子を使用することです。例えば、int array[3][3] = {0};
と記述することで、3×3の2次元配列の全ての要素を0で初期化できます。
この方法は、配列の全要素を0で埋めるために便利で、コードの可読性を向上させます。また、memset
関数を使用しても同様の結果を得ることができますが、初期化子を使う方が簡潔です。
2次元配列を0で初期化する方法
2次元配列を0で初期化する方法は、C言語においていくつかの方法があります。
ここでは、静的初期化、動的初期化、ループを使った初期化の3つの方法について詳しく解説します。
静的初期化
静的初期化の基本
静的初期化とは、配列を宣言する際に初期値を設定する方法です。
C言語では、配列を宣言する際に中括弧 {}
を使用して初期値を設定できます。
2次元配列の場合、各行の初期値を中括弧で囲み、さらにそれを全体の中括弧で囲むことで初期化します。
静的初期化の例
以下は、3×3の2次元配列を静的に0で初期化する例です。
#include <stdio.h>
int main() {
// 3x3の2次元配列を0で初期化
int array[3][3] = {
{0, 0, 0},
{0, 0, 0},
{0, 0, 0}
};
// 配列の内容を表示
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
return 0;
}
0 0 0
0 0 0
0 0 0
この例では、3×3の2次元配列を宣言し、すべての要素を0で初期化しています。
printf関数
を使って、配列の内容を表示しています。
動的初期化
動的初期化の基本
動的初期化は、プログラムの実行時にメモリを確保し、配列を初期化する方法です。
malloc関数
を使用してメモリを確保し、memset関数
を使って初期化することが一般的です。
動的初期化の例
以下は、3×3の2次元配列を動的に0で初期化する例です。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
// 3x3の2次元配列のメモリを動的に確保
int (*array)[3] = malloc(3 * sizeof(*array));
// メモリを0で初期化
memset(array, 0, 3 * 3 * sizeof(int));
// 配列の内容を表示
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
// メモリを解放
free(array);
return 0;
}
0 0 0
0 0 0
0 0 0
この例では、malloc
を使って3×3の2次元配列のメモリを動的に確保し、memset
で0に初期化しています。
最後にfree
でメモリを解放しています。
ループを使った初期化
forループを使った初期化
for
ループを使って、配列の各要素を0で初期化する方法です。
これは、配列のサイズが動的に決まる場合や、特定の条件で初期化を行いたい場合に便利です。
#include <stdio.h>
int main() {
int array[3][3];
// forループを使って配列を0で初期化
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
array[i][j] = 0;
}
}
// 配列の内容を表示
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
return 0;
}
0 0 0
0 0 0
0 0 0
この例では、for
ループを使って、3×3の2次元配列の各要素を0で初期化しています。
whileループを使った初期化
while
ループを使って配列を初期化する方法もあります。
while
ループは、条件が真である限り繰り返し処理を行うため、for
ループと同様に配列の初期化に利用できます。
#include <stdio.h>
int main() {
int array[3][3];
int i = 0, j = 0;
// whileループを使って配列を0で初期化
while (i < 3) {
while (j < 3) {
array[i][j] = 0;
j++;
}
j = 0; // jをリセット
i++;
}
// 配列の内容を表示
for (i = 0; i < 3; i++) {
for (j = 0; j < 3; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
return 0;
}
0 0 0
0 0 0
0 0 0
この例では、while
ループを使って3×3の2次元配列を0で初期化しています。
while
ループは、for
ループと同様に配列の初期化に利用できますが、ループの条件管理に注意が必要です。
応用例
2次元配列の初期化方法を理解したところで、これを応用したいくつかの例を紹介します。
これらの例は、実際のプログラムで2次元配列をどのように活用できるかを示しています。
2次元配列のサイズを動的に変更する
2次元配列のサイズを動的に変更するには、動的メモリ確保を利用します。
malloc
やrealloc
を使って、必要に応じてメモリを再確保することができます。
#include <stdio.h>
#include <stdlib.h>
int main() {
int rows = 3, cols = 3;
int **array = malloc(rows * sizeof(int*));
// 各行のメモリを確保
for (int i = 0; i < rows; i++) {
array[i] = malloc(cols * sizeof(int));
}
// 配列のサイズを変更(例:行を追加)
rows++;
array = realloc(array, rows * sizeof(int*));
array[rows - 1] = malloc(cols * sizeof(int));
// 新しい行を0で初期化
for (int j = 0; j < cols; j++) {
array[rows - 1][j] = 0;
}
// 配列の内容を表示
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;
}
この例では、3×3の2次元配列を動的に確保し、行を追加してサイズを変更しています。
realloc
を使ってメモリを再確保し、新しい行を0で初期化しています。
2次元配列を他の値で初期化する
2次元配列を0以外の値で初期化することも可能です。
例えば、すべての要素を1で初期化する場合を考えてみましょう。
#include <stdio.h>
int main() {
int array[3][3];
// すべての要素を1で初期化
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
array[i][j] = 1;
}
}
// 配列の内容を表示
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
printf("%d ", array[i][j]);
}
printf("\n");
}
return 0;
}
1 1 1
1 1 1
1 1 1
この例では、for
ループを使って3×3の2次元配列の各要素を1で初期化しています。
初期化する値を変更することで、任意の値で配列を初期化できます。
2次元配列を使った簡単なプログラム
2次元配列を使って、簡単なプログラムを作成することができます。
ここでは、2次元配列を使って行列の加算を行うプログラムを紹介します。
#include <stdio.h>
int main() {
int matrix1[2][2] = {{1, 2}, {3, 4}};
int matrix2[2][2] = {{5, 6}, {7, 8}};
int result[2][2];
// 行列の加算
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
result[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
// 結果を表示
printf("行列の加算結果:\n");
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 2; j++) {
printf("%d ", result[i][j]);
}
printf("\n");
}
return 0;
}
行列の加算結果:
6 8
10 12
このプログラムでは、2×2の行列を2つ用意し、それらを加算して結果を表示しています。
2次元配列を使うことで、行列のようなデータ構造を簡単に扱うことができます。
まとめ
2次元配列の初期化方法には、静的初期化、動的初期化、ループを使った初期化の3つがあります。
これらの方法を理解することで、C言語での配列操作がより柔軟に行えるようになります。
この記事を参考に、実際のプログラムで2次元配列を活用してみてください。