>>227の疑問に答えとこうか
知ってたらごめんね

初期化しなかったときの中身については、C言語の仕様では規定されてなかったはず(うろ覚え
親切なコンパイラなら0リセットしてくれるかもしれないし
普通のコンパイラなら特別な処理はしないんだろう

んで普通のコンパイラの場合で説明すると、
変数を宣言すると、メモリ上に変数に必要な容量の領域が確保されます。
この時点でその領域に入っているのは、確保される前にメモリ上にあった値です。
つまり、他のプログラム等で使った後だと、前のデータが残っていることがあります。
よって、初期化せずに読み出そうとすると、その前のデータを読み出してしまうことがあります。
だから、初期化する必要があります。

逆に言うと、宣言した時点で0になっていると言語仕様に規定されている場合は、
いちいち初期化せずとも、正しく(0として)使うことが出来ます。