
はじめてのC言語 | 第9回
はじめに
前回は、関数を使って処理をまとめる方法を学びました。
今回は、同じ型の値をまとめて保存する「配列」を扱います。
この回の目的は次の4点です。
- 配列の役割を理解する
- 配列の宣言と初期化の書き方を覚える
- 要素の取り出し方を知る
- for 文と組み合わせた基本的な使い方を確認する
配列とは何か
配列は、同じ型の値を順番に並べて保存する仕組みです。
たとえば、5人分の点数を保存したいときに使います。
変数を5個用意することもできますが、配列を使うと1つのまとまりとして扱えます。
配列の基本形
宣言の書式
型 配列名[要素数];例:
int scores[5];このコードは、整数を5個保存できる配列 scores を宣言しています。
最初のサンプルコード
ソースコード
array_sample.c という名前で保存します。
#include <stdio.h>
int main(void) {
int scores[3];
scores[0] = 80;
scores[1] = 90;
scores[2] = 75;
printf("%d\n", scores[0]);
printf("%d\n", scores[1]);
printf("%d\n", scores[2]);
return 0;
}実行手順
1. 作業ディレクトリに移動する
cd ~/Desktop2. コンパイルする
clang array_sample.c -o array_sample3. 実行する
./array_sample実行結果:
80
90
75コードの読み方
int scores[3];
整数を3個保存できる配列 scores を宣言しています。
scores[0] = 80;
配列の先頭の要素に 80 を代入しています。
scores[1] = 90;
2番目の要素に 90 を代入しています。
scores[2] = 75;
3番目の要素に 75 を代入しています。
配列の添字に注意する
C言語の配列は、0番目から始まります。
3個の要素がある場合、使える添字は次の3つです。
- 0
- 1
- 2
つまり、scores[3] は使えません。
初期化して宣言する
配列は、宣言と同時に値を入れることもできます。
#include <stdio.h>
int main(void) {
int scores[3] = {80, 90, 75};
printf("%d\n", scores[0]);
printf("%d\n", scores[1]);
printf("%d\n", scores[2]);
return 0;
}実行結果は同じです。
80
90
75この書き方の方が、値が最初から決まっているときは分かりやすいです。
for 文で配列を順番に処理する
配列は for 文と非常に相性が良いです。
#include <stdio.h>
int main(void) {
int scores[3] = {80, 90, 75};
int i;
for (i = 0; i < 3; i++) {
printf("%d\n", scores[i]);
}
return 0;
}実行結果:
80
90
75なぜ for 文と組み合わせるのか
配列の要素が増えるたびに、次のように1行ずつ書くのは非効率です。
printf("%d\n", scores[0]);
printf("%d\n", scores[1]);
printf("%d\n", scores[2]);for 文を使えば、添字を変えながら同じ処理を繰り返せます。
for (i = 0; i < 3; i++) {
printf("%d\n", scores[i]);
}この形は、配列を扱う基本になります。
合計を計算する例
配列の要素を順番に足していく例です。
#include <stdio.h>
int main(void) {
int scores[3] = {80, 90, 75};
int i;
int total = 0;
for (i = 0; i < 3; i++) {
total = total + scores[i];
}
printf("%d\n", total);
return 0;
}実行結果:
245平均を計算する例
整数同士の割り算になる点に注意します。
#include <stdio.h>
int main(void) {
int scores[3] = {80, 90, 75};
int i;
int total = 0;
int average;
for (i = 0; i < 3; i++) {
total = total + scores[i];
}
average = total / 3;
printf("%d\n", average);
return 0;
}実行結果:
81245 / 3 は 81.666… ですが、int 型同士の計算なので結果は 81 になります。
初心者がつまずきやすい点
添字は0から始まる
これは配列で最も重要な点です。
scores[0]が最初の要素です。
1 から始まるわけではありません。
範囲外の添字を使わない
次のようなコードは問題があります。
int scores[3] = {80, 90, 75};
printf("%d\n", scores[3]);scores[3] は範囲外です。
C言語ではこのようなアクセスは未定義動作になります。
エラーにならずに動いてしまうこともありますが、正しい結果は保証されません。
要素数と繰り返し回数を合わせる
次のコードは危険です。
for (i = 0; i < 5; i++) {
printf("%d\n", scores[i]);
}scores が3要素しかない場合、scores[3] や scores[4] にアクセスしてしまいます。
よくあるエラー
use of undeclared identifier
原因: 配列や変数を宣言する前に使っています。
対処: int scores[3]; や int i; を先に書きます。
範囲外アクセスによる不正な動作
原因: 添字が大きすぎます。
対処: 配列の要素数を確認し、for 文の条件を見直します。
初期化の個数が多すぎる
誤った例:
int scores[3] = {80, 90, 75, 60};要素数より多い値は入れられません。
練習用コード
5個の整数を表示する
#include <stdio.h>
int main(void) {
int numbers[5] = {10, 20, 30, 40, 50};
int i;
for (i = 0; i < 5; i++) {
printf("%d\n", numbers[i]);
}
return 0;
}合計を求める
#include <stdio.h>
int main(void) {
int numbers[5] = {10, 20, 30, 40, 50};
int i;
int total = 0;
for (i = 0; i < 5; i++) {
total = total + numbers[i];
}
printf("%d\n", total);
return 0;
}実行結果:
150まとめ
今回のポイントは次のとおりです。
- 配列は同じ型の値をまとめて保存する仕組みである
- 配列の添字は 0 から始まる
- scores[i] のようにして各要素を扱う
- 配列は for 文と組み合わせると効率よく処理できる
この回では、C言語の配列の基本を確認しました。
配列を使えるようになると、複数の値をまとめて処理できるようになります。
次回予告
次回は、文字列の基本を学びます。
C言語では文字列も配列と深く関係しているため、ここまでの内容がそのまま土台になります。
文字の並びをどう扱うのかを理解すると、C言語でできることがまた少し広がっていきます。

