C言語では、自動変数は明示的に初期化をしないと、その自動変数の値は未定義です。なので自動変数には明示的に初期化をする必要があります。 一方、静的変数(static変数)は明示的に初期化をしないと、0(数値型)またはNULL(ポインタ型)に初期化されます。 int i; /* 何が入っているか分からない */ static int j; /* 0が入っている */ ただし、単一の変数の宣言だったら、たとえ0で初期化されているとはいえ、 static int j; よりも static int j = 0; と明示的に書いた方が可読性が高くて良いでしょう。 しかし、配列を扱うときなどは、このように明示的に表すのが難しく、初期値を省略するのが一般的です。 例えば以下のように char *p[15]; /* 各要素はNULLで初期化されている */ なぜなら、明示的に表そうとすると、 char *