静的変数、ローカル変数、グローバル変数の詳細


最近C++を拾い直して、このいくつかの概念を学んで、スタックの呼び出し、分配などに関連して、ここで再び整理して、各位とお互いに学習を討論することを望みます.
静的データ・メンバーは、プログラム内にコピーが1つしかなく、このタイプのすべてのオブジェクトが共有してアクセスします.非静的データ・メンバーではない場合、各クラス・オブジェクトには独自のレプリカがあります.
クラスの静的メンバーは初期化する必要があります.静的メンバーがクラスである場合、そのコンストラクション関数が呼び出されます.
静的メンバー関数は、クラスの特定のオブジェクトにサービスするのではなく、クラスのすべてのサービスです.静的メンバー関数は、任意のオブジェクトに関連付けられていないため、thisポインタはありません.
#include
void fun(int i)
{
   static int value=i++;
   printf("%d
",value); } int main() { fun(0); fun(1); fun(2); return 0; }

プログラム出力は
 0
 0
 0
#include
void fun(int i)
{
   static int value=i++;
   value=i++;
   printf("%d
",value); } int main() { fun(0); fun(1); fun(2); return 0; }

プログラム出力は
 1
 1
 2
注記:
static変数は一度だけ初期化され、「記憶」機能を持ち、ソースプログラムと「生死、共存亡」する.
Auto変数はスタック領域に格納され、呼び出しが終了するとすぐに破棄されます.
ヘッダファイルに静的変数を定義すると、スペースが浪費されたり、プログラムエラーが発生したりします.各C言語ファイルでこのヘッダファイルが使用されている場合、各ヘッダファイルに静的変数が個別にリストされるためです.
グローバル変数定義を含まないソースファイルは、externキーでグローバル変数を再宣言する必要があります.
グローバル変数、静的ローカル変数、および静的グローバル変数は、静的ストレージ領域に空間を割り当て、ローカル変数はスタックに空間を割り当てます.
グローバル変数はグローバル役割ドメインを有し、静的変数は安定した役割ドメインを有する.
静的局所変数は局所作用ドメインを有し,一度だけ初期化される.静的グローバル変数にはファイルの役割ドメインがあり、1つのプログラムに複数のファイルが含まれている場合は、静的グローバル変数を宣言するファイルのみが有効になります.
#include
static int j;
int k=0;
int m;
void fun1()
{
   static int i=0;
   i++;
   m=i;
}
void fun2()
{
   j=0;//          ,j        10
   j++;
}
int main()
{
   for(k=0;k<10;k++)
   {
      fun1();
      fun2();
   }
   printf("%d
",m); printf("%d
",j); return 0; }

注記:
iは静的局所変数であり,一度だけ初期化される.
jは静的グローバル変数であり,関数呼び出しのたびに初期化される.
グローバル変数は、初期化されていないデフォルトが0であることのみを定義します.
ローカル変数は未初期化のみを定義し、intタイプの場合、デフォルトは-858993460、すなわち0 xccccccです.
#include
int my(const int a)
{
   static int count=a;
   return count + a;
}
int main()
{
   printf("%d
%d
",my(4),my(5)); return 0; }

プログラム出力結果は次のとおりです.
  9
  10
注記:
printf関数は、常にリスト変数の右端からスタックを計算し、左から右に対応するポップアップスタックを計算します.
ローカル変数はグローバル変数と名前を変更できますが、ローカル変数はグローバル変数をブロックします.グローバル変数を使用するには、アクション::.
#include
int i=1;
int main()
{
   int i=i;
   printf{"%d
",i); return 0; }

プログラム出力結果:
  -858993460
注記:
main関数で定義されたiはグローバル変数iをブロックし、定義されたi=それ自体になるため、ランダム値が出力されます.