配列

[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次元配列のサイズを動的に変更するには、動的メモリ確保を利用します。

mallocreallocを使って、必要に応じてメモリを再確保することができます。

#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次元配列を活用してみてください。

関連記事

Back to top button