C言語学習ポータル(無料版) 学習コンテンツ 配列 配列とは——箱の行列

🗃️ 配列

配列とは——箱の行列

無料公開版に収録・読む目安 11分

🎯 配列の宣言と要素へのアクセスができ、変数を並べるより配列が優れる理由を説明できる

5人分のテストの点数を記録してください、と言われたらどう書きますか。

int score1 = 60, score2 = 85, score3 = 40, score4 = 90, score5 = 75;

5人ならまだ我慢できます。では40人のクラスは。1000人の模試は。合計を出すのに score1 + score2 + ... と1000個並べるのは現実的ではありません。同じ型のデータをまとめて扱う道具が必要です。それが配列です。

int score[5];        // int の箱が5個、一列に並ぶ

[5] は「箱の個数」を表します。並んだ箱の1つずつを要素と呼び、何番目かを指定して読み書きします。

#include <stdio.h>

int main(void)
{
    int score[5];

    score[0] = 60;
    score[1] = 85;
    score[2] = 40;
    score[3] = 90;
    score[4] = 75;

    printf("%d\n", score[0]);          // 60
    printf("%d\n", score[2] + 10);     // 50
    return 0;
}

角カッコの中の数字を添字(インデックス)と呼びます。先頭は0番です。int score[5] なら使える添字は 0・1・2・3・4 の5つで、score[5] は存在しません。ここは次のトピックでじっくり扱います。

配列があると何が変わるか

変数を5個並べる書き方では、3人目の点数を取り出すのに score3 と名前で指定するしかありません。名前は実行中に変えられないので、「i番目の人」という書き方ができないのです。ここが決定的な違いです。配列なら score[i] と書けて、i を1つずつ増やせば全員ぶんの処理が数行で済みます。ループと組み合わせられること——これが配列の最大の価値です。

大きさは最初に決める

Cの配列は宣言した時点で大きさが決まり、あとから伸び縮みしません。40人のクラス用に int score[40]; と作ったら、41人目は入りません。不便に見えますが、「どこに何個ぶん置くか」を最初に確定できるから速い、という利点の裏返しです。実行してみるまで必要な数が分からない場合の対処法は、第2部の動的確保で扱います。

要素はメモリの上で隣り合って並ぶ

配列の要素は、メモリ上ですきまなく連続して置かれます。これが配列の本質で、あとで学ぶ「添字での高速アクセス」も「関数への渡り方」も、すべてこの性質から説明できます。全体の大きさは sizeof で確認できます。

#include <stdio.h>

int main(void)
{
    int a[5];

    printf("%zu\n", sizeof(a));           // 20(int 4バイト × 5個)
    printf("%zu\n", sizeof(a[0]));        // 4
    printf("%zu\n", sizeof(a) / sizeof(a[0]));   // 5 ← 要素数
    return 0;
}

罠・注意

配列の名前は scores names のように複数形にすると、「これは複数のデータだ」と一目で伝わります。個数を表す変数は n や count が定番です。

ビット変数に1・2・3…と番号を付けたくなったら、それは配列の出番だよ

まとめ: 配列は「同じ型の箱を一列に並べたもの」。型 名前[個数]; で作り、名前[番号] で出し入れします。

要点まとめ

アプリで演習問題まで解く(無料・登録不要)

この項目に出てくる用語

配列はいれつ

同じ型の値を一列に並べて、まとめて管理するデータ構造のこと。1つの名前で複数の値をまとめて扱える、箱の行列のようなもの。int arr[5];のように、要素の型と個数を指定して宣言する。

添字(インデックス)そえじ

配列の中の何番目の要素かを指定する番号のこと。C言語では、この番号を0から数え始める点にとくに注意が必要になる。要素数が5個の配列なら、添字は0から4までの範囲になる。

同じトラックのほかの項目

添字と0始まりの理由添字が0始まりである理由を理解し、範囲を間違えずにループを書ける 配列とループの黄金コンビforループで配列全体を走査でき、要素数を安全に管理できる 境界外アクセスという重大事故境界外アクセスが未定義動作であることを理解し、危険性と防ぎ方を説明できる 配列の初期化いろいろ配列の初期化の書き方を使い分けられ、未初期化の危険を避けられる 多次元配列2次元配列を宣言・初期化し、二重ループで表として扱える 配列を関数に渡す——入口編配列を関数へ渡す書き方を身につけ、値渡しとの違いに気づける 集計・最大値・検索の定石合計・最大値・線形探索の定型パターンを自力で書ける
添字と0始まりの理由 ›

もっと先へ:ポインタ・メモリ・ファイル入出力・セキュアコーディングを含む全26トラックと、段位検定・模試のフルセットは完全版に収録しています。

完全版(BOOTH)を見る

📚 姉妹教材:手を動かして覚える Linux 教材 — Linuxとインフラの仕組みを地図で学ぶ

Web版 / BOOTH