static は C プログラミング言語で使用されるキーワードです。これは変数と関数の両方で使用できます。つまり、静的変数と静的関数も宣言できます。通常の変数はそれが定義されているスコープに限定されますが、静的変数のスコープはプログラム全体です。
static キーワードは次の状況で使用できます。
グローバル変数が static キーワードを使用して宣言されている場合、その変数は静的グローバル変数と呼ばれます。これはプログラムの先頭で宣言され、プログラム全体で可視になります。
関数が静的関数と呼ばれる静的キーワードを使用して宣言されている場合。その有効期間はプログラム全体です。
ローカル変数が static キーワードを使用して宣言されている場合、その変数は静的ローカル変数と呼ばれます。静的ローカル変数のメモリはプログラム全体で有効ですが、変数の可視範囲は自動ローカル変数と同じです。ただし、最初の関数呼び出し中に関数が静的ローカル変数を変更すると、この変更された値は次の関数呼び出しでも使用できます。
メンバー変数がクラス内で static キーワードを使用して宣言されている場合、それは静的メンバー変数と呼ばれます。これらには、特定のインスタンスではなく、クラスのすべてのインスタンスからアクセスできます。
static キーワードを使用して宣言されたクラスのメンバー関数は、静的メソッドと呼ばれます。特定のインスタンスではなく、クラスのすべてのインスタンスからアクセスできます。
例を通して理解しましょう。
#include int main() { printf('%d',func()); printf(' %d',func()); return 0; } int func() { int count=0; // variable initialization count++; // incrementing counter variable return count; }
上記のコードでは、 func() 関数が呼び出されます。 func()ではcount変数が更新されます。関数の実行が完了すると、count 変数のメモリはすぐに削除されます。メモリからカウントを削除したくない場合は、カウント変数を静的に使用する必要があります。変数を静的として宣言すると、関数の実行が完了しても変数はメモリから削除されません。
出力
1 1
静的変数
静的変数は、さまざまな関数呼び出しにわたって値を保持する変数です。
構文
静的変数の構文は次のとおりです。
春と春のMVC
static data_type variable_name;
静的変数の簡単な例を見てみましょう。
#include int main() { printf('%d',func()); printf(' %d',func()); return 0; } int func() { static int count=0; count++; return count; }
上記のコードでは、count 変数を静的として宣言しました。 func() が呼び出されると、count の値は 1 に更新され、次の関数呼び出し時に count 変数の値は 2 になります。したがって、静的変数の値は関数呼び出し内で保持されると言えます。 。
出力
1 2
静的関数
ご存知のとおり、非静的関数はデフォルトでグローバルであるということは、その関数がファイルの外部からもアクセスできることを意味しますが、関数を静的として宣言すると、関数のスコープが制限されます。静的関数にはファイル内でのみアクセスできます。
離散数学の否定
静的関数は次のようになります。
static void func() { printf('Hello javaTpoint'); }
静的変数とグローバル変数の違い
グローバル変数は、関数の外で宣言される変数です。これらのグローバル変数はプログラムの先頭に存在し、そのスコープはプログラムの終了まで残ります。プログラム外からもアクセス可能です。
静的変数は、それが定義されているソース ファイルに限定されます。つまり、他のソース ファイルからはアクセスできません。
静的変数とグローバル変数の両方に静的な初期化があります。ここで、静的初期化とは、変数に値を割り当てない場合、デフォルトで変数に 0 の値が割り当てられることを意味します。
静的ローカル変数と静的グローバル変数の違い
静的グローバル変数
変数が関数の外で static キーワードを使用して宣言されている場合、その変数は静的グローバル変数と呼ばれます。プログラム全体を通じてアクセスできます。
静的ローカル変数
関数内で宣言された static キーワードを持つ変数は、静的ローカル変数と呼ばれます。静的ローカル変数のスコープは自動ローカル変数と同じですが、そのメモリはプログラムの実行中ずっと使用できます。ある関数呼び出し中に関数が静的ローカル変数の値を変更すると、その値は次の関数呼び出し中も同じままになります。
静的変数のプロパティ
静的変数のプロパティは次のとおりです。
- 静的変数のメモリは、静的変数内に割り当てられます。
- そのメモリはプログラム全体で利用できますが、スコープは自動ローカル変数と同じままです。その
- 値はさまざまな関数呼び出しにわたって保持されます。
- 変数に値を割り当てない場合、デフォルト値は 0 になります。
- グローバル静的変数にはプログラムの外部からアクセスできませんが、グローバル変数には他のソース ファイルからアクセスできます。