6

私がこのようなものを書く場合:

#include <iostream>

int main()
{
    using namespace std;

    {int n;n=5;} cout<<n;
    system("pause");
    return 0;
}

コンパイラは、nが宣言されていないことを通知します。それから私はそれを静的にしようとしました、しかし再び、コンパイラはそれが宣言されていないことを私に告げます。変数declatedstaticにはプログラムスコープがありませんか?そうでない場合、このプログラムでnを使用するにはどうすればよいですか?

4

6 に答える 6

18

スコープとライフタイムを混同しています。静的変数の有効期間はプログラムの有効期間と同じですが、宣言された場所に基づいたスコープ規則に従います。

于 2013-03-01T07:16:52.017 に答える
6

nのスコープは、角かっこで囲まれています。

{int n;n=5;}

したがって、ブロックの外側には、n変数はありません。

静的にすると、ブロックを終了した後も値が保持されるため、次にそのブロックに再び入るときに、そのブロックを最後に実行したときの値を取得できますが、スコープはまだ括弧内にあります。

于 2013-03-01T07:24:58.440 に答える
1

グローバルスコープで静的と宣言された変数のスコープは、変換単位に限定されます。関数内で静的と宣言された変数の有効期間は、プログラムの有効期間と同じに設定されていますが、この場合、そのスコープには影響しません。使用するには、宣言されたcoutものと同じスコープを設定する必要があります。n

于 2013-03-01T07:18:06.857 に答える
1

ここで、コンパイラはエラーnを宣言していません。これは、ここでは " {int n; n=5;} "が中括弧で宣言されているためです。そして中括弧は変数のスコープについて教えてくれます。スコープが終了するたびに、変数はメモリから削除されます

そして静的およびローカル用。

静的:変数はグローバル変数と同じですが、その値はアプリケーション全体で一定のままです。また、 externを使用して他のページで静的変数を使用することはできません。

ローカル:ローカル変数はスタックに格納され、スコープ外になると削除されます。

于 2013-03-01T11:56:59.340 に答える
0

このプログラムでnを使用するにはどうすればよいですか?

using namespace std;
int main()
{
     int n;      // declare n as int
     n=5;        // assign it a value
     cout << n;  // display it.
     system("pause");
     return 0;
}
于 2013-03-01T07:17:04.037 に答える
0

静的変数のスコープと存続期間を混同しないでください。スコープとは、変数にアクセスできる場所を意味します。変数の寿命は、変数がメモリにとどまる期間です。あなたの場合、x変数のスコープは中括弧内にあります。xの寿命はプログラムスコープになります。

于 2020-07-11T05:46:25.483 に答える