
C言語入門|配列を使いこなす基本パターン
配列の宣言や型の考え方がなんとなく分かってきたら、
次はいよいよ 「どう使うか」 の話です。
配列は、ただ値を並べておくだけの箱ではありません。
繰り返し処理と組み合わせることで、本領を発揮する道具なんです。
ここでは、配列を使いこなすためにぜひ身につけておきたい
基本パターン を、やさしく順番に見ていきましょう。

添え字には変数が使える
まず最初に、配列を使い始めた人が驚きやすいポイントからです。
values[0]
values[1]これまで、こんなふうに 固定の数値 を添え字に書いてきたかもしれません。
でも実は、添え字には 変数 を使うことができます。
values[i]変数 i に 3 が入っていれば、values[3]
つまり 前から4番目の要素 にアクセスする、という意味になります。
配列は、
添え字を変数で指定してこそ意味がある
と言っても言いすぎではありません。
サンプルプログラムで雰囲気をつかもう
「10回 Hit 分のダメージ値をランダムに生成する」プログラムを例にします。
プロジェクト名:7-5-1 ソースファイル名: sample7-5-1.c
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand((unsigned)time(NULL)); // 乱数生成の準備
int damages[10];
// ダメージ値をランダムに生成
for (int i = 0; i < 10; i++) {
damages[i] = rand() % 50 + 1; // 1〜50 のダメージ
}
return 0;
}このコードでは、
- for 文のループ変数 i
- 配列の添え字 i
がセットになって動いています。
i が 0 → 1 → 2 → … と変わるたびに、
配列の別の要素にアクセスしている
これが、配列の基本的な使い方です。
配列 × ループは最強コンビ
配列を扱うとき、
for 文とセットで考える
というクセをつけておくと、とても楽になります。
配列の要素数が N 個なら、
| 要素番号 | 添え字 |
|---|---|
| 1個目 | 0 |
| 2個目 | 1 |
| … | … |
| N個目 | N-1 |
このルールにぴったり合うのが for 文です。
パターン1:ループによる全要素の利用
最もよく使われる、いちばん基本の形です。
典型的な書き方
for (int i = 0; i < 配列要素数; i++) {
配列変数名[i] を使った処理
}何をしているのか
- i を 0 から始める。
- i が 配列要素数 未満の間、処理を繰り返す
- 1回ごとに i を 1 ずつ増やす
つまり、
配列の先頭から最後まで、1つずつ順番に処理する
という動きになります。
よくある用途
| 用途 | 内容 |
|---|---|
| 表示 | 全要素を画面に表示する。 |
| 初期化 | 配列をまとめて初期化する。 |
| 更新 | すべての要素を一定ルールで変更する。 |
パターン2:ループによる集計
次に紹介するのは、
配列の中身を数えたり、合計したりするパターン です。
カウント集計の基本形
int count = 0;
for (int i = 0; i < 配列要素数; i++) {
if (条件に一致する) {
count++;
}
}最初に集計用の変数を 0 にしておき、
条件に合った要素が見つかるたびに増やしていきます。
合計と平均を求める例
ここでは、元のテスト点数とは別に
「5日分の歩数」を集計する例にしてみましょう。
プロジェクト名:7-5-2 ソースファイル名: sample7-5-2.c
#include <stdio.h>
int main(void)
{
int steps[] = {8200, 6500, 9000, 7100, 8800};
int sum = 0;
for (int i = 0; i < 5; i++) {
sum += steps[i];
}
int avg = sum / 5;
printf("合計歩数:%d\n", sum);
printf("平均歩数:%d\n", avg);
return 0;
}処理の流れ
- sum を 0 で初期化
- 配列の要素を 1つずつ sum に足す。
- 最後に要素数で割って平均を求める。
この考え方は、
点数・金額・回数・時間 など、いろいろな場面で使えます。
パターン3:添え字に対応した情報を利用する
ここからが、配列を使いこなしている感が一気に出るパターンです。
少し泥臭い例
条件分岐をたくさん書くと、コードはどうしても長くなります。
if (type == 0) {
printf("A");
} else if (type == 1) {
printf("B");
} else if (type == 2) {
printf("C");
}動きは正しいですが、
読みづらく、増やしにくい のが難点です。
配列を使って一気にスッキリさせる
ここでは、別の例として
「レベルに応じた評価文字」を表示するプログラムにします。
プロジェクト名:7-5-3 ソースファイル名: sample7-5-3.c
#include <stdio.h>
int main(void)
{
const char RANKS[] = {'D', 'C', 'B', 'A', 'S'};
int levels[] = {0, 2, 4, 3, 1};
for (int i = 0; i < 5; i++) {
printf("%c ", RANKS[levels[i]]);
}
printf("\n");
return 0;
}何が起きているのか
- levels[i] で レベル値(0〜4)を取得
- その値を添え字として RANKS に渡す
- 対応する評価文字を取り出す
処理を分解すると、こうなります。
int level = levels[i];
char rank = RANKS[level];
printf("%c ", rank);これを1行で書いているだけなんですね。
配列は「対応表」として使える
このパターンの本質は、
数値と意味を結びつける対応表 として配列を使うことです。
| 添え字 | 意味 |
|---|---|
| 0 | D |
| 1 | C |
| 2 | B |
| 3 | A |
| 4 | S |
switch 文を書かなくても、
配列1つで表現できるようになります。
添え字演算子の正体を少しだけ
普段なにげなく使っている [] ですが、
これは 添え字演算子 と呼ばれる演算子です。
array[i]という書き方は、
- 配列 array の
- i 番目の要素を取り出す
という意味を持っています。
なお、
- 配列宣言の []
- 要素アクセスの []
は、見た目は同じでも 役割がまったく違う ので、
「宣言用」「取り出し用」と分けて覚えておくと混乱しません。
まとめ:配列はパターンで覚えると楽になる
今回紹介した、配列の基本パターンは次の3つです。
| パターン | 内容 |
|---|---|
| パターン1 | ループで全要素を処理する。 |
| パターン2 | ループで集計する。 |
| パターン3 | 添え字を使って対応する情報を取り出す。 |
これらは、
C言語だけでなく、他の言語でも通用する考え方 です。
まずはこの3つを自然に書けるようになることを目標に、
少しずつ配列と仲良くなっていきましょう。
