
C言語入門|配列使用時の落とし穴
ここまでで、配列の宣言や使い方、
for 文と組み合わせた基本パターンなどを学んできました。
「もう配列はバッチリですね!」
……と言いたいところですが、最後にもうひと踏ん張りです。
配列はとても便利な道具ですが、
使い方を間違えてもコンパイルエラーにならない
という、ちょっと怖い一面も持っています。
そこでこの章では、
配列を使うときにハマりやすい落とし穴 をまとめて確認していきましょう。

配列は集成体型だということを忘れない
まず大前提として、配列は
- int や double のような基本型
ではなく - 集成体型
です。
つまり、
- 数値1つとして扱う。
- そのまま表示する。
- そのまま計算する。
といった操作は、原則できません。
ここをうっかり忘れると、
「動いたけど結果が変」
という、いちばん困る状態に陥ります。
配列はそのまま表示できない
最初の落とし穴が、配列の表示 です。
たとえば、次のようなコードを書いたとします。
int scores[] = {12, 24, 36, 48, 60};
printf("%d\n", scores);「配列なんだから、中身が表示されるんじゃ?」
と思ってしまいがちですが、これは NG です。
実際に起こること
- コンパイルは成功する。
- 実行すると、意味不明な数字が表示される。
たとえば、こんな出力です。
140732812945040「えっ、なにこれ……?」
これは エラーではありません。
だからこそ、余計に厄介なんです。
なぜこんなことが起きるの?
配列変数 scores は、
- 配列の中身
ではなく - 配列の先頭を指す情報
として扱われます。
printf は、
- %d で整数を表示しようとしている。
- でも渡されたのは配列変数
という状態になり、
結果として 意味のない数値 が表示されます。
配列の中身を表示する正しい方法
配列の内容を表示したい場合は、
ループで1要素ずつ取り出す しかありません。
int scores[] = {12, 24, 36, 48, 60};
for (int i = 0; i < 5; i++) {
printf("scores[%d] = %d\n", i, scores[i]);
}ポイントを整理すると
| 項目 | 内容 |
|---|---|
| 表示対象 | 配列そのものではなく要素 |
| 方法 | for 文で順番に処理 |
| 安全性 | 意図した値が確実に表示される。 |
少し面倒に感じるかもしれませんが、
これが 正しいやり方 です。
配列同士の計算はできない
次の落とし穴は、配列の計算 です。
int a[] = {1, 2, 3};
int b[] = {4, 5, 6};
int c[] = a + b; // NGこれは、見た瞬間に
「まあ、無理そうだな」
と感じるかもしれませんね。
実際、配列同士を直接足したり引いたりは できません。
配列同士の比較もできない
さらに注意が必要なのが、配列の比較 です。
if (a == b) {
printf("同じ配列です\n");
}これも NG です。
しかも、
コンパイルエラーや警告が出ないこともあります。
これが、配列の落とし穴としていちばん怖いポイントです。
なぜ計算や比較ができないの?
理由はシンプルです。
- 配列変数は「値の集合」
- 算術演算子や関係演算子は「単一の値」を前提
この前提が合っていないため、
意味のある計算や比較ができません。
配列を計算・比較したいときの正しい考え方
配列を扱うときは、
配列全体ではなく、要素に注目する
という考え方が大切です。
要素ごとに比較する例
int a[] = {1, 2, 3};
int b[] = {1, 2, 3};
int same = 1;
for (int i = 0; i < 3; i++) {
if (a[i] != b[i]) {
same = 0;
break;
}
}
if (same) {
printf("内容は同じです\n");
}要点を表で整理すると
| 操作 | 正しい方法 |
|---|---|
| 表示 | 要素を1つずつ表示 |
| 計算 | 要素を1つずつ計算 |
| 比較 | 要素を1つずつ比較 |
構造体と同じ注意点が当てはまる
配列は 集成体型 です。
そのため、以前学んだ構造体と、
まったく同じ注意点 が当てはまります。
- そのまま表示できない。
- そのまま計算できない。
- そのまま比較できない。
「まとめて扱える」代わりに、
「まとめて操作できるわけではない」
という点を、しっかり覚えておきましょう。
まとめ:配列は静かにミスを誘う
配列の落とし穴で怖いのは、
- コンパイルは通る。
- 実行もできる。
- でも結果が間違っている。
というケースが多いことです。
だからこそ、
- 配列は集成体型
- 操作は要素単位で
この2点を、常に意識してください。
配列はとても頼れる相棒ですが、
扱い方を間違えると、
黙って間違った結果を返してくる
こともあります。
ここまで理解できれば、
配列との付き合い方はもう安心です 😊
