#include <stdio.h>

int main(void)
{
 int a=10, b=100, c=1000;
 return 0;
}

例えば、こんな感じにaを10、bを100、cを1000で初期化して、
プログラムを実行する。

mainのスコープ時は、メモリ内に各データが入ってるが、
プログラムが終了すると、
a、b、cという変数名は消えるが、
メモリ内ではデータは入っている。

int型は、4バイトの領域だけど、
4バイト丸々使うとは限らない、
なので、プログラムが終了すると、
4バイトという枠がなくなり、データだけがそこに存在する。

そして、int型を宣言すると、
メモリ内に4バイトの枠が出来る。

その中には、元々aとbとcに入っていたデータと
それ以上の内容が新たに宣言したint型の4バイトの中に入ってしまう。

なので、初期化しないで初期値を呼び出した時に、
すでにデータが入っていたのだ。

まあ、これは俺の勝手な想像だけどね。