C++: 配列の基礎

最終更新:2026-08-31

配列は同じ型の複数の値を1つの変数に格納する。単一の値を格納する変数とは異なり、配列は「値の並び」を格納できる。


1. 配列とは何か?

(1) 1.1 現実の例え

日常のシナリオ プログラミングでの相当
本棚に本を並べる 配列に要素を格納
本棚から3番目の本を取る books[2]でアクセス
本棚の本を数える 配列をループ

(2) 1.2 メモリ内の配列

配列の要素はメモリに連続して格納される。

TEXT 📖 参照専用
インデックス:    [0]  [1]  [2]  [3]  [4]
値:              10   20   30   40   50
メモリアドレス: 1000  1004  1008  1012  1016
💡 ヒント: インデックスは0から始まる。5つの要素を持つ配列のインデックスは0〜4。



2. 配列の宣言と初期化

(1) 2.1 宣言

CPP
int scores[5]; // 5つの整数を格納する配列を宣言

(2) 2.2 初期化

CPP
int scores[5] = {90, 85, 78, 92, 88}; // 宣言と同時に初期化
int numbers[] = {1, 2, 3, 4, 5};      // サイズを省略可能(自動的に5になる)
int zeros[5] = {0};                    // すべて0で初期化


3. 要素へのアクセス

CPP
#include <iostream>

int main() {
    int scores[5] = {90, 85, 78, 92, 88};
    
    std::cout << scores[0] << std::endl; // 90(最初の要素)
    std::cout << scores[4] << std::endl; // 88(最後の要素)
    
    scores[2] = 80; // 値を変更
    
    return 0;
}


4. 配列とループ

(1) 4.1 forループ

CPP
#include <iostream>

int main() {
    int scores[5] = {90, 85, 78, 92, 88};
    
    for (int i = 0; i < 5; i++) {
        std::cout << "scores[" << i << "] = " << scores[i] << std::endl;
    }
    
    return 0;
}

(2) 4.2 範囲forループ(C++11)

CPP
#include <iostream>

int main() {
    int scores[] = {90, 85, 78, 92, 88};
    
    for (int score : scores) {
        std::cout << score << " ";
    }
    
    return 0;
}


5. 配列の制限

(1) 5.1 固定サイズ

配列のサイズはコンパイル時に決定する必要がある。

CPP
int size = 5;
int arr[size]; // ❌ エラー(一部のコンパイラでは動作するが標準ではない)

const int SIZE = 5;
int arr[SIZE]; // ✅ OK: 定数を使う

(2) 5.2 範囲外アクセス

CPP
int arr[5] = {1, 2, 3, 4, 5};
std::cout << arr[5]; // ❌ 未定義の動作(インデックスは0〜4)
⚠️ 注意: C++は範囲外アクセスをチェックしない。プログラムはクラッシュするか、間違ったデータを読み取る。



6. 配列を関数に渡す

配列は関数に渡されるとポインタに減衰する。

CPP
#include <iostream>

void printArray(int arr[], int size) { // または int* arr
    for (int i = 0; i < size; i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
}

int main() {
    int numbers[] = {1, 2, 3, 4, 5};
    printArray(numbers, 5);
    return 0;
}

▶ サンプル 1:配列の合計を計算(難易度 ⭐)

CPP
#include <iostream>

int sum(int arr[], int size) {
    int total = 0;
    for (int i = 0; i < size; i++) {
        total += arr[i];
    }
    return total;
}

int main() {
    int numbers[] = {10, 20, 30, 40, 50};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    
    std::cout << "合計: " << sum(numbers, size) << std::endl;
    return 0;
}
▶ 試してみよう

▶ サンプル 2:最大値を探す(難易度 ⭐⭐)

CPP
#include <iostream>

int findMax(int arr[], int size) {
    int max = arr[0];
    for (int i = 1; i < size; i++) {
        if (arr[i] > max) {
            max = arr[i];
        }
    }
    return max;
}

int main() {
    int numbers[] = {45, 23, 89, 12, 67};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    
    std::cout << "最大値: " << findMax(numbers, size) << std::endl;
    return 0;
}
▶ 試してみよう

▶ サンプル 3:配列内の特定値を検索(難易度 ⭐)

CPP
#include <iostream>

int search(int arr[], int size, int target) {
    for (int i = 0; i < size; i++) {
        if (arr[i] == target) {
            return i; // 見つかったインデックスを返す
        }
    }
    return -1; // 見つからない
}

int main() {
    int numbers[] = {10, 25, 30, 45, 50};
    int size = sizeof(numbers) / sizeof(numbers[0]);
    
    int index = search(numbers, size, 30);
    if (index != -1) {
        std::cout << "30はインデックス" << index << "にあります" << std::endl;
    } else {
        std::cout << "見つかりません" << std::endl;
    }
    return 0;
}
▶ 試してみよう

❓ よくある質問

Q 配列のサイズを動的に変更できる?
A Cスタイル配列では不可。動的サイズが必要ならstd::vectorを使う(後のレッスンで解説)。
Q 配列のサイズをどうやって取得?
A sizeof(arr) / sizeof(arr[0])を使う。ただし配列がポインタに減衰した後は使えない。
Q 配列のインデックスはなぜ0から始まる?
A 配列のインデックスはメモリオフセット。最初の要素のオフセットは0だから。

📖 まとめ


📝 練習問題

  1. 初級(難易度 ⭐): 5つの整数を格納する配列を作成し、すべての要素を出力。

  2. 中級(難易度 ⭐⭐): 配列の平均値を計算する関数を書く。

  3. 上級(難易度 ⭐⭐⭐): 配列を逆順にする関数を書く。

Web-Tutorial.com

Web-Tutorial 技術チーム

複数の開発者によって共同維持されているプログラミングチュートリアルプラットフォーム。各チュートリアルは専門分野の開発者が執筆・レビューしています。正確で信頼性の高いコンテンツを目指しています — 問題を見つけた場合はお知らせください。

100%