i が int i=10 として複数回定義されているため、次のコードでエラーが発生しないのはなぜですか? さらに、反復変数 i が影響を受けないのはなぜですか? 競合がないのはなぜですか?出力は 1010101010 です。
#include<stdio.h>
int main()
{
int i;
for(i=0;i<5;i++)
{
int i=10;
printf("%d",i);
i++;
}
}
i が int i=10 として複数回定義されているため、次のコードでエラーが発生しないのはなぜですか? さらに、反復変数 i が影響を受けないのはなぜですか? 競合がないのはなぜですか?出力は 1010101010 です。
#include<stdio.h>
int main()
{
int i;
for(i=0;i<5;i++)
{
int i=10;
printf("%d",i);
i++;
}
}
this is because of scope of variable
scope of variable lies within { to }
your first int i will be alive through out the main() while the int i inside for will be alive inside for loop only.
now why the output is 1010101010???
the simple explanation is when you enter for look your new i will be equal to 10, you print it then i++ makes it 11. again next time i = 10 you print it and i++ makes it 11 this continues for main() int i < 5 so five times you will get 1010101010.
hope it helps.....
自動変数は、それらが存在するスコープ内でのみ有効{
です。プログラムで名前が
付けられた 2 つの変数があります。}
i
i
宣言された in にmain
は、関数全体のスコープがありますmain
。i
内側には、for
ループの内側にのみスコープがあります。 i
for ループ内で参照すると、内部で宣言されたi
シャドウが.i
main
int i=10;
infor loop
はループ内でのみ使用でき、ループ外で以前に定義されていたかどうかはわかりません。
コードのブロック内で定義された変数のスコープは、そのブロックのみに限定されます。すなわち、
int i=1;//outer i
{
int i=2;//inner i
printf("%d"&i);// this ll print 2
}
printf("%d"&i);// this ll print 1
も同じです。つまり、
int i=1;
for (int i=0;i<4;i++){
printf("%d",&i); // print 0 1 2 3
}
printf("%d",&i); // print 1
あなたの場合、インナー i を 10 に初期化して出力するたびに、インナー i をインクリメントしたので、宣言して 10 に初期化したインナー i の値を毎回出力します。