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点を、常に意識してください。

配列はとても頼れる相棒ですが、
扱い方を間違えると、
黙って間違った結果を返してくる
こともあります。

ここまで理解できれば、
配列との付き合い方はもう安心です 😊