[C言語] 2次元配列に任意の値を代入する方法を解説

C言語で2次元配列に任意の値を代入するには、配列のインデックスを指定して値を設定します。

2次元配列は行と列で構成されており、例えばarray[i][j]のように指定することで、ij列の要素にアクセスできます。

この方法を用いて、特定の位置に任意の値を代入することが可能です。

初期化時に値を設定する場合は、int array[2][3] = {{1, 2, 3}, {4, 5, 6}}のように記述します。

動的に値を代入する場合は、ループを使用して各要素にアクセスし、値を設定することが一般的です。

この記事でわかること
  • 2次元配列への値の代入方法
  • 具体的な2次元配列の操作例
  • 行列の加算と乗算の実装方法
  • 画像データの処理における2次元配列の応用

目次から探す

2次元配列への値の代入方法

C言語における2次元配列は、行と列で構成されるデータの集合体です。

ここでは、2次元配列に値を代入する方法をいくつか紹介します。

静的初期化

静的初期化は、配列を宣言すると同時に値を設定する方法です。

以下に例を示します。

#include <stdio.h>
int main() {
    // 2次元配列の静的初期化
    int matrix[2][3] = {
        {1, 2, 3}, // 1行目の初期化
        {4, 5, 6}  // 2行目の初期化
    };
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
1 2 3 
4 5 6 

この方法は、配列のサイズと初期値が決まっている場合に便利です。

コードが簡潔で、初期化時にすべての要素に値を設定できます。

動的代入

動的代入は、プログラムの実行中に配列の要素に値を設定する方法です。

以下に例を示します。

#include <stdio.h>
int main() {
    int matrix[2][3]; // 2次元配列の宣言
    // 動的に値を代入
    matrix[0][0] = 1;
    matrix[0][1] = 2;
    matrix[0][2] = 3;
    matrix[1][0] = 4;
    matrix[1][1] = 5;
    matrix[1][2] = 6;
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
1 2 3 
4 5 6 

動的代入は、プログラムのロジックに基づいて値を設定する場合に有効です。

初期化時に値が決まっていない場合に使用します。

ループを使った代入

ループを使った代入は、配列の各要素に対して繰り返し処理を行い、値を設定する方法です。

以下にforループとwhileループを使った例を示します。

forループを使った代入

#include <stdio.h>
int main() {
    int matrix[2][3]; // 2次元配列の宣言
    // forループを使って値を代入
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            matrix[i][j] = i * 3 + j + 1; // 計算式で値を設定
        }
    }
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
1 2 3 
4 5 6 

forループを使うことで、規則的な値を効率的に代入できます。

特に、計算式を用いることで、複雑な初期化も簡単に行えます。

whileループを使った代入

#include <stdio.h>
int main() {
    int matrix[2][3]; // 2次元配列の宣言
    int i = 0, j = 0;
    // whileループを使って値を代入
    while (i < 2) {
        while (j < 3) {
            matrix[i][j] = i * 3 + j + 1; // 計算式で値を設定
            j++;
        }
        j = 0; // 列のインデックスをリセット
        i++;
    }
    // 配列の要素を出力
    for (i = 0; i < 2; i++) {
        for (j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
1 2 3 
4 5 6 

whileループを使うことで、条件に基づいた柔軟な代入が可能です。

特に、ループの終了条件が動的に変わる場合に有効です。

具体例で学ぶ2次元配列の操作

2次元配列は、データを行と列で整理するのに便利な構造です。

ここでは、具体的な例を通じて2次元配列の操作方法を学びます。

2次元配列に整数を代入する例

整数を2次元配列に代入する基本的な方法を示します。

以下の例では、2×3の配列に整数を代入しています。

#include <stdio.h>
int main() {
    int matrix[2][3]; // 2次元配列の宣言
    // 値を代入
    matrix[0][0] = 10;
    matrix[0][1] = 20;
    matrix[0][2] = 30;
    matrix[1][0] = 40;
    matrix[1][1] = 50;
    matrix[1][2] = 60;
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
10 20 30 
40 50 60 

この例では、手動で各要素に整数を代入しています。

配列の各要素に直接アクセスして値を設定する方法です。

文字列を2次元配列に代入する例

文字列を2次元配列に代入する方法を示します。

ここでは、文字列の配列を使って複数の文字列を格納します。

#include <stdio.h>
int main() {
    // 文字列を格納する2次元配列
    char words[3][10] = {
        "apple",  // 1行目の文字列
        "banana", // 2行目の文字列
        "cherry"  // 3行目の文字列
    };
    // 配列の要素を出力
    for (int i = 0; i < 3; i++) {
        printf("%s\n", words[i]);
    }
    return 0;
}
apple
banana
cherry

この例では、各行に異なる文字列を格納しています。

文字列の長さに応じて、2次元配列の列数を設定する必要があります。

2次元配列の要素を出力する例

2次元配列の要素を出力する方法を示します。

以下の例では、整数の2次元配列を出力しています。

#include <stdio.h>
int main() {
    int matrix[2][3] = {
        {1, 2, 3}, // 1行目の初期化
        {4, 5, 6}  // 2行目の初期化
    };
    // 配列の要素を出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }
    return 0;
}
1 2 3 
4 5 6 

この例では、forループを使って2次元配列の各要素を順番に出力しています。

行と列のインデックスを使って、配列の要素にアクセスします。

応用例

2次元配列は、さまざまな応用が可能です。

ここでは、行列の加算や乗算、画像データの処理といった応用例を紹介します。

2次元配列を使った行列の加算

行列の加算は、同じサイズの2つの行列の対応する要素を加算する操作です。

以下に例を示します。

#include <stdio.h>
int main() {
    int matrixA[2][2] = {{1, 2}, {3, 4}}; // 行列Aの初期化
    int matrixB[2][2] = {{5, 6}, {7, 8}}; // 行列Bの初期化
    int result[2][2]; // 結果を格納する行列
    // 行列の加算
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            result[i][j] = matrixA[i][j] + matrixB[i][j];
        }
    }
    // 結果の出力
    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の行列AとBを加算し、結果を新しい行列に格納しています。

行列の加算は、対応する要素を単純に加算するだけで実現できます。

2次元配列を使った行列の乗算

行列の乗算は、行列の各要素を計算して新しい行列を生成する操作です。

以下に例を示します。

#include <stdio.h>
int main() {
    int matrixA[2][2] = {{1, 2}, {3, 4}}; // 行列Aの初期化
    int matrixB[2][2] = {{5, 6}, {7, 8}}; // 行列Bの初期化
    int result[2][2] = {0}; // 結果を格納する行列
    // 行列の乗算
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            for (int k = 0; k < 2; k++) {
                result[i][j] += matrixA[i][k] * matrixB[k][j];
            }
        }
    }
    // 結果の出力
    for (int i = 0; i < 2; i++) {
        for (int j = 0; j < 2; j++) {
            printf("%d ", result[i][j]);
        }
        printf("\n");
    }
    return 0;
}
19 22 
43 50 

この例では、2×2の行列AとBを乗算し、結果を新しい行列に格納しています。

行列の乗算は、行と列の積を計算して各要素を求めます。

2次元配列を使った画像データの処理

2次元配列は、画像データの処理にも利用されます。

以下に、簡単な画像のネガポジ反転の例を示します。

#include <stdio.h>
int main() {
    // 3x3の画像データ(グレースケール)
    int image[3][3] = {
        {0, 128, 255},
        {64, 192, 32},
        {255, 0, 128}
    };
    // ネガポジ反転
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            image[i][j] = 255 - image[i][j];
        }
    }
    // 結果の出力
    for (int i = 0; i < 3; i++) {
        for (int j = 0; j < 3; j++) {
            printf("%d ", image[i][j]);
        }
        printf("\n");
    }
    return 0;
}
255 127 0 
191 63 223 
0 255 127 

この例では、3×3のグレースケール画像データをネガポジ反転しています。

各ピクセルの値を255から引くことで、反転した画像を得ることができます。

2次元配列を使うことで、画像の各ピクセルを簡単に操作できます。

よくある質問

2次元配列のサイズを動的に変更できますか?

C言語では、静的に宣言された配列のサイズを動的に変更することはできません。

しかし、動的メモリ割り当てを使用することで、実行時に配列のサイズを変更することが可能です。

mallocrealloc関数を使用して、メモリを動的に確保し、ポインタを使って2次元配列のように扱うことができます。

2次元配列の要素にアクセスする際の注意点は?

2次元配列の要素にアクセスする際は、行と列のインデックスを正しく指定する必要があります。

インデックスは0から始まるため、範囲外のインデックスを指定すると未定義の動作を引き起こす可能性があります。

また、配列のサイズを超えないように注意が必要です。

例:matrix[i][j]のようにアクセスしますが、ijが配列の範囲内であることを確認してください。

2次元配列とポインタの違いは何ですか?

2次元配列は、固定サイズのメモリ領域を持つデータ構造で、行と列のインデックスを使って要素にアクセスします。

一方、ポインタはメモリのアドレスを保持する変数で、動的にメモリを操作することができます。

2次元配列は、ポインタを使って動的に扱うことも可能ですが、ポインタは配列のように固定サイズではなく、柔軟にメモリを管理できます。

まとめ

2次元配列は、C言語でデータを整理し操作するための強力なツールです。

この記事では、2次元配列への値の代入方法や具体的な操作例、応用例について学びました。

これにより、2次元配列を使ったプログラミングの基礎を理解できたはずです。

今後は、実際にコードを書いて2次元配列を活用し、より複雑なデータ構造やアルゴリズムに挑戦してみてください。

当サイトはリンクフリーです。出典元を明記していただければ、ご自由に引用していただいて構いません。

関連カテゴリーから探す

  • URLをコピーしました!
目次から探す