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

関数レベルの静的変数はいつC/C ++で初期化されますか?


静的変数は、staticキーワードを使用して定義できます。これらは、プログラムの実行中にメモリに残る変数です。つまり、それらの存続期間はプログラムの実行全体です。これは自動変数とは異なり、関数が実行されているときにのみメモリに残り、関数が終了すると破棄されます。

関数レベルの静的変数は、最初に使用されるときに作成および初期化されますが、そのときのメモリはプログラムのロード時に割り当てられます。

Cで関数レベルの静的変数を示すプログラムは次のとおりです-

#include<stdio.h>
int func() {
   static int num = 0;
   num += 5;
   return num;
}
int main() {
   for(int i = 0; i<5; i++) {
      printf("%d\n", func());
   }
   return 0;
}

出力

上記のプログラムの出力は次のとおりです。

5
10
15
20
25

上記のプログラムを理解しましょう。

関数func()には、0に初期化される静的変数numが含まれています。次に、numが5増加し、その値が返されます。これを示すコードスニペットは次のとおりです。

int func() {
   static int num = 0;
   num += 5;
   return num;
}

関数main()では、関数func()がforループを使用して5回呼び出され、出力されるnumの値を返します。 numは静的変数であるため、プログラムの実行中はメモリに残り、一貫した値を提供します。これを示すコードスニペットは次のとおりです。

int main() {
   for(int i = 0; i<5; i++) {
      printf("%d\n", func());
   }
   return 0;
}

  1. C / C ++のmemcpy()

    この記事では、C ++ STLでのmemcpy()関数の動作、構文、および例について説明します。 memcpy()とは何ですか? memcpy()関数は、C ++ STLに組み込まれている関数であり、ヘッダーファイルで定義されています。 memcpy()関数は、メモリのブロックをコピーするために使用されます。この関数は、あるメモリ位置から別のメモリ位置に値の数をコピーするために使用されます。 関数の結果は、データのバイナリコピーです。この関数は、終了ソースまたは終了ヌル文字をチェックせず、ソースからnumバイトをコピーするだけです。 例 void memcpy( void* destin

  2. C / C ++のAAツリー?

    コンピュータサイエンスのAAツリーは、順序付けられたデータを効率的に保存および取得するために実装されたバランスの取れたツリーの形式として定義されます。 AAツリーは、エントリの効率的な追加と削除をサポートするバイナリ検索ツリーの形式である赤黒ツリーのバリエーションとして扱われます。赤黒木とは対照的に、AAツリーの赤いノードは、左のサブチャイルドではなく、右のサブチャイルドとしてのみ追加できます。この操作の結果、2-3-4ツリーではなく2-3ツリーのシミュレーションが行われるため、メンテナンス操作が簡素化されます。赤黒木のメンテナンスアルゴリズムでは、ツリーのバランスを適切にとるために、7つの異