私は学習者で、C言語を初めて使用します。forループを使用して2つの数値の累乗を与える関数を作成しているときに、ループの開始前にint宣言を使用すると、ループ内でプログラムの出力が変更されます。これはなぜですか?
正しい出力で 'int'宣言を1回使用するコード。
# include<stdio.h>
int main()
{
int x, y;
int r = 1;
int k;
printf("Enter base number:");
scanf("%d", &x);
printf("Enter power");
scanf("%d", &y);
for (k = 1; k <= y; k++)
{
r = r * x;
}
printf("Power is %d", r);
return 0;
}
正しい出力:
Enter base number:7
Enter power3
Power is 343
不適切なコード2:
# include<stdio.h>
int main()
{
int x, y;
int r = 1;
int k;
printf("Enter base number:");
scanf("%d", &x);
printf("Enter power");
scanf("%d", &y);
for (k = 1; k <= y; k++)
{
int r = r * x;
}
printf("Power is %d", r);
return 0;
}
誤った出力:
Enter base number:7
Enter power3
Power is 1
なぜそうなのか教えてください。
for (k = 1; k <= y; k++)
{
int r = r * x;
}
int r
for
ループの内側は、ループのスコープでのみ表示される個別の一意の変数を宣言しfor
ます。
これr
はループのr
外側を指すものではありませんfor
。
ただし、ループの(inner)の初期化部分の内部ではr
、inner の宣言がこの時点で実行されていないため、inner はr
外部をシャドウしません。r
r
したがって、r
in r * x
は、内側r
ではなく、外側を指します。
あなたが書いた場合:
for (k = 1; k <= y; k++)
{
int r = 2;
r = r * x;
}
次に、はすべてr
内部r
を参照し、完全に外部をシャドウします。
その後、使用すると
printf("Power is %d", r);
r
変更されないままの外部変数の値を出力します。これは、
Power is 1
サイドノート:
for
ますが、宣言をループの初期化部分の内部に配置するか、ループの前に宣言する方が適切です。この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加