すべての変数は、最新の宣言を参照します(もちろん、そのスコープで有効です)。
main()
{
int i=3;
while(i--) // this i is the one defined in the line above
{
int i=100;
i--; // this i is the one defined in the line above
printf("%d..",i); // this i is the one defined two lines above
}
}
iつまり、whileループは、によって宣言されたものに依存するため、3回繰り返されます。これは、ループ内で、 edによって宣言されたものを参照しているためにint i = 3;出力されます。99iiint i = 100;--
に変更int i = 100;するi = 100と、最初の変数が変更され、i別の変数は導入されません。したがって、無限ループ。
編集一部の人々は、「最新」の代わりに、この例を挙げて「現在のスコープでアクセス可能な最も内側の宣言」と言うべきだと言いました。
int a=4;
{
int a=10;
}
printf("%d", a);
2番目aはによって表示されないためprintf、明らかprintf("%d", a);にそれを参照することはできません。読者は、変数が定義されているスコープ内でのみ変数にアクセスできることを十分に知っていると思います。そうでない場合、最初の2つのコメントのフレーズはより正確です。