スコープは、
ローカルスコープと
グローバルスコープの2タイプあります。
全ての関数の外に宣言された変数はグローバルスコープです。
このようなグローバル変数は、プログラムのどこからでもアクセス出来ます。
グローバル変数はグローバルメモリプールに配置されるので、その有効期間はプログラム存在期間と一致します。
ブロックの内側({}で囲まれたコード)で宣言された変数はローカルスコープです。
このようなローカル変数は、ブロックの外側からアクセス出来ません。
ローカル宣言の一般的なケースは、関数内で宣言された変数です。
ローカル変数のメモリはスタック上に配置されるので、変数の有効期間はその関数が終了するまでです。
ローカル変数のスコープは、ローカル変数が宣言されたブロックなので、
他ブロックで宣言された変数と同じ名前の変数を宣言する事が可能です。
同様にグローバルレベルまで上のレベルで宣言された変数と同じ名前を使用する事が可能です。
ローカル変数は
static修飾子で宣言する事が出来ます。
この静的ローカル変数のメモリはグローバルプールに配置されます。
つまり、静的ローカル変数の有効期間はプログラム存在期間と一致します。
但し、スコープは静的ローカル変数が宣言されたブロックに限定されます。
サンプルソースのforループ例について。
forループ行で同じ名前の別の変数(icount)を宣言していますが、この変数のスコープはfor式とforループ内だけです。
またforループ内部で宣言した変数(lastcount)のスコープは、このforループ内だけです。