C言語入門|配列の初期化:基本ルールと便利な初期化方法

C言語でプログラムを書いていると、必ずといっていいほど登場するのが「配列」です。
配列はとても便利な仕組みですが、初期化を忘れると一気にトラブルの原因になります。

「変数は使う前に初期化する」
これはC言語の大原則ですが、実は配列もまったく同じです。

この記事では、

  • なぜ配列の初期化が必要なのか
  • 初期化しなかった場合に何が起こるのか
  • 配列を安全・スマートに初期化する方法

を、順を追ってやさしく解説していきます。

なぜ配列の初期化が必要なの?

まず大切なポイントから確認しましょう。

C言語では、変数や配列を宣言しただけでは、中にどんな値が入っているか保証されません
そのメモリ領域に以前使われていた「ゴミの値」が、そのまま残っていることもあります。

これは配列でも同じです。

初期化していない変数・配列を使うとどうなる?

次のサンプルプログラムを見てみましょう。

プロジェクト名:7-3-1 ソースファイル名: sample7-3-1.c

#include <stdio.h>

int main(void)
{
    int score;
    printf("scoreの中身: %d\n", score);

    int points[3];
    printf("points[0]の中身: %d\n", points[0]);

    return 0;
}

実行結果の一例は、次のようになります。

scoreの中身: -125987432
points[0]の中身: 0

えっ? 0が出てるから大丈夫?

ここで注意です。
points[0] が 0 になっているのは たまたま です。

項目説明
score完全に不定な値(毎回変わる可能性あり)
points[0]今回は0だが、保証は一切ない。

つまり、
初期化していない変数・配列の値は信用してはいけません。

このようなコードは、動いたとしても非常に危険です。

配列を1つずつ初期化する方法

では、配列を安全に使うにはどうすればよいのでしょうか。

一番素直な方法は、すべての要素に値を代入することです。

int points[3];
points[0] = 0;
points[1] = 0;
points[2] = 0;

これは確実ですが、ちょっと面倒ですよね。

連鎖代入でまとめて初期化する

C言語では、次のように連鎖代入を書くことができます。

int points[3];
points[0] = points[1] = points[2] = 0;

何が起きているの?

このコードは、右から左へ次の順で評価されます。

  1. points[2] に 0 を代入
  2. その結果(0)を points[1] に代入
  3. さらにその結果(0)を points[0] に代入

「おおっ、そんな書き方できるんだ!」と思いますよね。
確かに便利ですが、要素数が増えると一気に書くのが大変になります。

宣言と同時に初期化するのが基本

そこで登場するのが、配列の宣言と同時に初期化する方法です。
これが最もおすすめで、実務でもよく使われます。

配列の宣言と初期化の書式

要素の型 配列名[要素数] = { 初期値0, 初期値1, ... };

具体例

int points[3] = {0, 0, 0};

この時点で、配列のすべての要素が確実に初期化されます。
とても安心ですね。

要素数を省略できる便利な書き方

実は、配列の宣言時には 要素数を省略することも可能 です。

int points[] = {0, 0, 0};

この場合、

内容説明
要素数初期値の個数(この例では3)
配列のサイズ自動的に決まる。

「数え間違い」が起きにくいので、こちらを好んで使う人も多いです。

初期値が足りない場合はどうなる?

次のようなコードはどうなるでしょうか?

int points[5] = {10, 20, 30};

実は、これはまったく問題ありません

添え字中に入る値
points[0]10
points[1]20
points[2]30
points[3]0
points[4]0

指定されなかった要素は、自動的に0で初期化される
というルールがあるためです。

全要素を0で初期化する最強の書き方

このルールを応用すると、さらにシンプルな書き方ができます。

int points[5] = {0};

この1行で、すべての要素が 0 になります。

さらに、最近のC言語では次の書き方も可能です。

int points[5] = {};

どちらも意味は同じで、

  • 要素数が多くても
  • 変更があっても

とにかく安全でラクな書き方です。

まとめ:配列の初期化は「安全運転」

ここまでの内容を整理すると、次のようになります。

ポイント内容
初期化しない配列何が入っているかわからない。
要素ごとの代入確実だが手間がかかる。
宣言と同時に初期化一番おすすめ
{0} や {}全要素を0にできて超便利

配列は便利ですが、初期化を忘れると一気に危険になります。
ぜひ今回紹介した方法を使って、安心・安全なコードを書いていきましょう。