C 言語では、変数や関数の可視性やスコープなど、変数や関数の特性はストレージ クラスによって記述されます。
C 言語のストレージ クラスには、自動変数、外部変数、静的変数、レジスタ変数の 4 種類があります。
Auto ストレージ クラスは、すべてのローカル変数のデフォルトのストレージ クラスです。関数が呼び出されたときに作成されます。関数の実行が完了すると、変数は自動的に破棄されます。
これらは関数のローカル変数であるため、ローカル変数とも呼ばれます。デフォルトでは、コンパイラはそれらにガベージ値を割り当てます。
スコープ - 自動変数は、ファンクション ブロックのローカル変数です。
デフォルト値 - ガベージ値はデフォルトの初期化値です。
ライフタイム - auto 変数のライフタイムは、それが定義されているブロックによって制限されます。
これは C 言語の auto 変数の例です。ライブ デモンストレーション
#include <stdio.h> int main() { auto int a = 28; int b = 8; printf("The value of auto variable : %d</p><p>", a); printf("The sun of auto variable & integer variable : %d", (a+b)); return 0; }
The value of auto variable : 28 The sun of auto variable & integer variable : 36
外部変数はグローバル変数とも呼ばれます。これらの変数は関数の外部で定義されます。これらの変数は、関数の実行全体を通じてグローバルに使用できます。グローバル変数の値は関数を通じて変更できます。
スコープ - これらはどの関数にもバインドされません。これらはプログラム内のどこにでも、つまりグローバルに存在します。
デフォルト値 - グローバル変数のデフォルトの初期化値は 0 です。
ライフサイクル - > プログラムの実行が終了するまで。
これは C 言語の extern 変数の例です。
ライブ デモンストレーション
#include <stdio.h> extern int x = 32; int b = 8; int main() { auto int a = 28; extern int b; printf("The value of auto variable : %d</p><p>", a); printf("The value of extern variables x and b : %d,%d</p><p>",x,b); x = 15; printf("The value of modified extern variable x : %d</p><p>",x); return 0; }
The value of auto variable : 28 The value of extern variables x and b : 32,8 The value of modified extern variable x : 15
静的変数は 1 回だけ初期化されます。コンパイラは、プログラムが終了するまでこの変数を保持します。静的変数は関数の内部または外部で定義できます。
スコープ - これらはブロックのローカル変数です。
デフォルト値 - > デフォルトの初期化値はゼロです。
ライフサイクル - プログラムの実行が終了するまで。
これは C 言語の静的変数の例です。
ライブ デモンストレーション
#include <stdio.h> int main() { auto int a = -28; static int b = 8; printf("The value of auto variable : %d</p><p>", a); printf("The value of static variable b : %d</p><p>",b); if(a!=0) printf("The sum of static variable and auto variable : %d</p><p>",(b+a)); return 0; }
The value of auto variable : -28 The value of static variable b : 8 The sum of static variable and auto variable : -20
レジスタ変数は、メモリではなく CPU レジスタに変数を格納するようにコンパイラに指示します。頻繁に使用される変数はレジスタに保存されるため、より高速にアクセスできます。これらの変数のアドレスを取得することはできません。
スコープ - 関数内に限定されます。
デフォルト値 - デフォルトの初期化値はガベージです。
ライフサイクル - それを定義するコード ブロックの実行が終了する前。
C 言語のレジスタ変数の例を次に示します。
オンライン デモンストレーション
#include <stdio.h> int main() { register char x = 'S'; register int a = 10; auto int b = 8; printf("The value of register variable b : %c</p><p>",x); printf("The sum of auto and register variable : %d",(a+b)); return 0; }
The value of register variable b : S The sum of auto and register variable : 18
以上がC のストレージ クラスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。