ホームページ > よくある問題 > 静的変数とグローバル変数の違いは何ですか?

静的変数とグローバル変数の違いは何ですか?

silencement
リリース: 2019-07-08 10:43:11
オリジナル
8619 人が閲覧しました

静的変数とグローバル変数の違いは何ですか?

グローバル変数と静的変数

static C 言語では、宣言された変数には次の 2 つの特性があります:

1. 変数はプログラム内に配置されます。グローバル記憶領域。これにより、次回呼び出されたときに元の割り当てを維持できます。これがスタック変数やヒープ変数との違いです。

2. 変数は static を使用して、変数のスコープ内でのみ表示されることをコンパイラーに伝えます。これがグローバル変数との違いです。

ヒント:

A. グローバル変数が 1 つの C ファイル内でのみアクセスされる場合は、この変数を静的グローバル変数に変更して、モジュール間の結合を減らすことができます。

B. グローバル変数が 1 つの関数によってのみアクセスされる場合、この変数を関数の静的ローカル変数に変更して、モジュール間の結合を減らすことができます;

C. 動的にアクセスするための設計と使用グローバル変数、静的グローバル変数、静的ローカル変数、リエントラントの問題を考慮する必要があります;

D. リエントラント関数が必要な場合は、関数内で静的変数の使用を避けなければなりません (関数は呼び出されます) : 「内部メモリ」関数を持つ関数)

#E. 関数内で静的変数を使用する必要がある場合: たとえば、関数の戻り値がポインター型の場合、静的である必要があります。戻り値にはローカル変数が使用され、auto 型の場合はエラーポインタが返されます。

関数の前に static を追加すると、その関数は静的関数になります。ただし、ここでの「静的」の意味は、保存方法を指すのではなく、関数の範囲がこのファイルに限定されることを指します(したがって、内部関数とも呼ばれます)。内部関数を使用する利点は、異なる人が異なる関数を作成するときに、自分が定義した関数の名前が他のファイル内の関数と同じかどうかを心配する必要がないことです。

拡張分析: 静的という用語には珍しい歴史があります。当初、キーワード static は、ブロックを終了した後もまだ存在するローカル変数を示すために C に導入されました。その後、C では static に 2 番目の意味があり、他のファイルからアクセスできないグローバル変数や関数を表すために使用されます。最後に、C はこのキーワードを再利用し、前の意味とは異なる 3 番目の意味を与えます。つまり、クラスに属する特定のオブジェクトではなく、クラスに属する変数と関数を示します (Java のこのキーワードと同じ意味)。

グローバル変数、静的グローバル変数、静的ローカル変数、ローカル変数の違い

変数は、グローバル変数、静的グローバル変数、静的ローカル変数、ローカル変数に分類できます。

記憶領域に応じて、グローバル変数、静的グローバル変数、静的ローカル変数はすべてメモリの静的記憶領域に格納され、ローカル変数はメモリのスタック領域に格納されます。思い出。

スコープに応じて、グローバル変数はプロジェクト ファイル全体で有効です。静的グローバル変数は、それが定義されているファイル内でのみ有効です。静的ローカル変数は、それが定義されている関数内でのみ有効です。メモリ、変数は関数が戻った後も消えません; ローカル変数は、それが定義されている関数内では有効ですが、関数が戻った後は無効になります。

グローバル変数 (外部変数) の記述の前に static を付けて、静的グローバル変数を形成します。グローバル変数自体は静的格納メソッドであり、静的グローバル変数も当然静的格納メソッドです。どちらも保存方法に違いはありません。両者の違いは、非静的グローバル変数の有効範囲はソースプログラム全体であり、ソースプログラムが複数のソースファイルで構成されている場合、非静的グローバル変数は各ソースファイル内で有効となります。静的グローバル変数はスコープを制限します。つまり、変数が定義されているソース ファイル内でのみ有効であり、同じソース プログラム内の他のソース ファイルでは使用できません。静的グローバル変数のスコープは 1 つのソース ファイルに限定され、そのソース ファイル内の関数でのみ共有できるため、他のソース ファイルでのエラーを回避できます。

上記の分析から、ローカル変数を静的変数に変更すると、その保存方法が変更され、その有効期間が変更されることがわかります。グローバル変数を静的変数に変更すると、そのスコープが変更され、その使用範囲が制限されます。

静的関数は通常の関数スコープとは異なり、変数が定義されているソース ファイル内でのみ有効です。現在のソースファイル内でのみ使用される関数は内部関数(static)として宣言し、内部関数を現在のソースファイル内に記述して定義する必要があります。現在のソースファイル外で使用できる関数はヘッダファイルに記述し、その関数を使用するソースファイルにはこのヘッダファイルをインクルードする必要があります。

静的グローバル変数と通常のグローバル変数の違い: 静的​​グローバル変数は、他のファイル単位で参照されないように 1 回だけ初期化されます;

静的ローカル変数は通常の変数とは異なりますローカル変数。違いは何ですか: 静的ローカル変数は 1 回だけ初期化され、次回は前の結果値に基づきます;

静的関数と通常の関数の違いは何ですか: 静的関数はスコープが異なります通常の関数とは異なり、変数のソースのみが定義されます ファイル内で有効;

グローバル変数と静的変数が手動で初期化されていない場合、コンパイラによって 0 に初期化されます。ローカル変数の値は不明です。

以上が静的変数とグローバル変数の違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート