C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C ++の静的変数、自動変数、グローバル変数、ローカル変数の違い


ここには2つの別個の概念があります-

  • スコープ。名前にアクセスできる場所を決定します-グローバルおよびローカル
  • 保存期間。変数がいつ作成および破棄されるかを決定します-静的および自動

スコープ

ローカル変数は、その関数またはコードブロック内にあるステートメントでのみ使用できます。ローカル変数がそれ自体で機能することは知られていない。

#include <iostream>
using namespace std;

int main () {
   // Local variable declaration:
   int a, b;
   int c;

   // actual initialization
   a = 10;
   b = 20;
   c = a + b;

   cout << c;
   return 0;
}

これにより、出力が得られます-

出力

30

グローバル変数は、すべての関数の外部、通常はプログラムの上で定義されます。グローバル変数は、プログラムの存続期間を通じてその値を保持します。グローバル変数には、どの関数からでもアクセスできます。

#include <iostream>
using namespace std;

// Global variable declaration:
int g;

int main () {
   // Local variable declaration:
   int a, b;

   // actual initialization
   a = 10;
   b = 20;
   g = a + b;

   cout << g;
   return 0;
}

これにより、出力が得られます-

出力

30

保存期間

自動変数はローカル変数であり、実行がスコープを離れると存続期間が終了し、スコープが再入力されると再作成されます。

for (int i =0 0; i < 5; ++i) {
   int n = 0;
   printf("%d ", ++n); // prints 1 1 1 1 1 - the previous value is lost
}

静的変数の有効期間は、プログラムが終了するまで続きます。それらがローカル変数である場合、実行がスコープを離れても、それらの値は保持されます。

for (int i = 0; i < 5; ++i) {
   static int n = 0;
   printf("%d ", ++n); // prints 1 2 3 4 5 - the value persists
}

staticキーワードには、静的保存期間以外にもさまざまな意味があることに注意してください。また、C ++では、autoキーワードは自動保存期間を意味しなくなりました。これは、変数の初期化子から推定される自動型を意味するようになりました。


  1. C ++の#defineとconstキーワードの違いは何ですか?

    #defineディレクティブはプリプロセッサディレクティブです。プリプロセッサは、コンパイラがマクロを認識する前に、これらのマクロを本体に置き換えます。これは、ソースコードの自動検索と置換と考えてください。 const変数宣言は、言語で実際の変数を宣言します。これは、実際の変数のように使用できます。アドレスを取得し、渡し、キャストし、変換します。 コンパイラの最適化がないと、さまざまなケースでこれらの両方に関連するメモリ割り当ての隠れたコストが発生します。しかし、適切に最適化すれば、それらはほぼ同じになります。また、プリプロセッサマクロにはスコープがありませんが、const値にはスコープがあ

  2. Pythonのグローバル変数とローカル変数の違いは何ですか?

    グローバル変数は、グローバルにアクセスできる変数です。ローカル変数は、単一の関数定義で使用される一時変数など、現在のスコープにのみアクセスできる変数です。 例 指定されたコード内 q = "I love coffee" # global variable def f():     p = "Me Tarzan, You Jane." # local variable     print p  f() print q 出力 出力は次のとおりです Me Tarzan, You Jane. I love cof