C言語/配列

出典: フリー教科書『ウィキブックス(Wikibooks)』

配列の基本概念[編集]

配列とは何か[編集]

配列は、同じ型のデータを連続して格納するためのデータ構造です。個々のデータ要素はインデックス(添字)を使ってアクセスします。例えば、整数型の変数を10個格納する場合、10個の変数を個別に宣言する代わりに、1つの配列として宣言できます。

メモリ上の配置[編集]

配列はメモリ上で連続した領域に格納されます。これにより、配列の各要素に対して効率的にアクセスできます。

配列と変数の違い[編集]

変数は単一のデータを格納しますが、配列は複数の同じ型のデータを格納します。

配列の宣言と初期化[編集]

配列の宣言[編集]

配列を使用するには、まず配列の型とサイズを宣言します。例えば、10個の整数を格納する配列を宣言するには以下のようにします。

int array[10];

配列の初期化[編集]

配列を宣言すると同時に初期化することもできます。

int array[5] = {1, 2, 3, 4, 5};

これにより、arrayの各要素に順に値が代入されます。

配列の操作[編集]

配列要素へのアクセス[編集]

配列の各要素にはインデックスを使ってアクセスします。インデックスは0から始まります。

array[0] = 10; // 配列の最初の要素に10を代入

ループを使った配列操作[編集]

配列の全要素にアクセスする場合、ループを使うのが一般的です。

const int len = sizeof array / sizeof *array;
for (int i = 0; i < len; i++) {
    printf("%d ", array[i]);
}

配列の使用例[編集]

基本的な使用例[編集]

数値の合計と平均の計算
int sum = 0;
for (int i = 0; i < len; i++) {
    sum += array[i];
}
double average = (double)sum / len;
printf("Sum: %d, Average: %.2f\n", sum, average);
最大値と最小値の探索
int max = array[0];
int min = array[0];
for (int i = 1; i < len; i++) {
    if (array[i] > max) {
        max = array[i];
    }
    if (array[i] < min) {
        min = array[i];
    }
}
printf("Max: %d, Min: %d\n", max, min);

多次元配列[編集]

二次元配列の概念[編集]

二次元配列は行と列で構成される配列で、例えば行列のようにデータを格納します。

二次元配列の宣言と初期化[編集]

int matrix3x4[3][4];
int matrix[2][2] = {{1, 2}, {3, 4}};

二次元配列の操作[編集]

for (int i = 0; i < 2; i++) {
    for (int j = 0; j < 2; j++) {
        printf("%d ", matrix[i][j]);
    }
    printf("\n");
}

配列とポインタ[編集]

配列名とポインタの関係[編集]

配列名は配列の先頭要素へのポインタとして扱われます。

int *p = array;

ポインタを使った配列操作[編集]

for (int i = 0; i < len; i++) {
    printf("%d ", *(array + i));
}

文字列と文字配列[編集]

文字列の概念[編集]

文字列は文字の配列として扱われ、最後にヌル文字 `\0` が含まれます。

char str[6] = "hello";

文字配列の操作[編集]

標準ライブラリ関数を使って文字列を操作します。

#include <string.h>
printf("Length: %lu\n", strlen(str));

配列の制約と注意点[編集]

メモリ管理[編集]

静的配列はサイズが固定されており、動的にサイズを変更することはできません。

境界チェックの重要性[編集]

配列の範囲外アクセスは未定義の動作を引き起こすため、範囲チェックが重要です。

章末問題[編集]

理解度チェック[編集]

  1. 基本問題
    5つの整数を格納する配列を宣言し、各要素に値を代入して出力するプログラムを書きなさい。
  2. 応用問題
    配列の要素を入力し、バブルソートで昇順に並べ替えるプログラムを書きなさい。
  3. プログラム作成問題
    配列を用いて、指定された文字列の逆順を表示するプログラムを書きなさい。

この章を通じて、配列の基本から応用までの知識を身につけ、C言語で配列を効果的に使えるようになることを目指します。