「for」ループを使用しているときにプログラムで「int」タグを2回追加すると、出力が異なるのはなぜですか?

ムルンマイダハレ:

私は学習者で、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

なぜそうなのか教えてください。

RobertSはMonica Cellioをサポートしています。
for (k = 1; k <= y; k++)
{
   int r = r * x;
}

int rforループの内側は、ループのスコープでのみ表示される個別の一意の変数を宣言しforます。

これrループr外側を指すものではありませんfor

ただし、ループの(inner)の初期化部分の内部ではr、inner の宣言がこの時点で実行されていないため、inner r外部をシャドウしませんrr

したがって、rin 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

サイドノート:

  • 各反復で新しい変数を宣言するように指示するので、ループの本体内で変数を宣言することはあまり意味がありません。コンパイラはこれを1つの定義のみに最適化できforますが、宣言をループの初期化部分の内部に配置するか、ループの前に宣言する方が適切です。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

Related 関連記事

ホットタグ

アーカイブ