ローカル変数とグローバル変数の違い
コンテンツ
前に説明したように、変数はメモリの場所に付けられた名前であり、使用する前に宣言する必要があります。 Cでは、すべての変数はプログラムの開始時に宣言されます。 C ++では、変数は命令で使用される前にいつでも宣言できます。
変数は「ローカル」変数と「グローバル」変数に分類されます。これは、議論の主要なトピックです。ここで、ローカル変数とグローバル変数の主な違いは、ローカル変数が関数ブロック内で宣言されることです。対照的に、グローバル変数はプログラム内の関数の外側で宣言されます。
ローカル変数とグローバル変数の違いを比較チャートとともにさらに調べてみましょう。
- 比較表
- 定義
- 主な違い
- 長所
- 短所
- 結論
比較表:
比較の基礎 | ローカル変数 | グローバル変数 |
---|---|---|
宣言 | 変数は関数内で宣言されます。 | 変数は関数の外で宣言されます。 |
範囲 | 関数内で、内部で宣言されます。 | プログラム全体。 |
値 | 初期化されていないローカル変数は、ガベージ値を保存します。 | 初期化されていないグローバル変数は、デフォルトでゼロを保存します。 |
アクセス | ステートメントが宣言されている関数内でのみ、ステートメントによってアクセスされます。 | プログラム全体の任意のステートメントによってアクセスされます。 |
データ共有 | 提供されていない | 促進された |
生活 | ファンクションブロックに入ると作成され、終了すると破棄されます。 | プログラムが実行されている間ずっと存在し続けます。 |
ストレージ | ローカル変数は、指定されない限りスタックに保存されます。 | コンパイラによって決定された固定場所に保存されます。 |
パラメータの受け渡し | 必ず必要 | グローバル変数には必要ありません。 |
変数値の変更 | ローカル変数に含まれる変更は、プログラムの他の機能には影響しません。 | 関数のグローバル変数に適用される変更は、プログラム全体の変更を反映しています。 |
ローカル変数の定義
A ローカル変数 は常に関数ブロック内で宣言されます。 Cでは、ローカル変数はコードブロックの開始時に宣言されます。 C ++では、使用前にコードブロック内の任意の場所で宣言できます。ローカル変数は、ローカル変数が宣言されている関数内に記述されたステートメントによってのみアクセスできます。これらは、同じプログラムの他の機能からはアクセスできないという意味で安全です。
ローカル変数は、関数のブロックが実行されるまで存在するため、実行がブロックを終了すると破棄されます。ローカル変数は、実行が宣言されたブロックを離れるとすぐに内容を失います。
その背後にある理由は、特別なストレージが指定されていない限り、ローカル変数がスタックに格納されるためです。スタックは本質的に動的であり、メモリの場所の変更は、関数のブロックが存在するとすぐにローカル変数が値を保持しない理由につながります。
注意:
ただし、「静的」修飾子を使用してローカル変数の値を保持する方法があります。
グローバル変数の定義
A グローバル変数 プログラムに存在するすべての関数の外側で宣言されています。ローカル変数とは異なり、グローバル変数にはプログラムに存在する任意の関数からアクセスできます。グローバル変数は、プログラムに存在する任意の関数によって値を変更できるため、あまり信頼できません。
これらは、プログラム全体が完全に実行されるまで存在し続けます。グローバル変数は、プログラムが実行されるまで値を保持します。理由は、それらがコンパイラによって決定されるメモリの固定領域に保存されるためです。
グローバル変数は、複数の関数が同じデータにアクセスしている状況で役立ちます。グローバル変数の値に不要な変更が加えられる可能性があるため、多数のグローバル変数を使用すると問題が生じる場合があります。
- ローカル変数は「ローカル」と呼ばれます。これは、変数が宣言された関数内で記述されたステートメントにのみ知られており、その関数ブロック外に存在する他の関数には知られていないためです。グローバル変数の場合、それらはプログラムに存在するすべての関数に知られています。したがって、それらは「グローバル」と呼ばれます。
- グローバル変数は、コンパイラーによって決定された固定位置に保存されるため、プログラムが実行フェーズになるまで値を保持します。ローカル変数はスタックに保存されます。したがって、「スタック」は本質的に動的であるため、値は保持されませんが、「静的」修飾子を使用することにより、コンパイラは値を保持するように指示できます。
- グローバル変数とローカル変数が同じ名前で宣言されている場合、ローカル変数が宣言されているコードブロックのすべてのステートメントはローカル変数のみを参照し、グローバル変数には影響を与えません。
- ローカル変数は、プログラムの制御がローカル変数が宣言されているブロックから出るときに破棄されます。ただし、プログラム全体が終了すると、グローバル変数は破棄されます。
長所
ローカル変数
- ローカル変数の主な利点は、データの偶発的な変更がないことです。変数はブロック内で宣言され、これらのコードブロックは変数を使用して、望ましくない副作用を回避します。
- ローカル変数は、変数を含むブロックが実行されたときにのみ、限られた期間メモリを消費します。
グローバル変数
- グローバル変数は、同じデータを操作するプログラム内のいくつかの関数を扱う場合に非常に役立ちます。
- グローバル変数を実装すると、プログラム全体に適用する必要がある変更が簡単になります。
- どこからでも、プログラムの任意のランダム機能からアクセスできます。
短所
ローカル変数
- ローカル変数のスコープは制限されています。
- データ共有を禁止します。
- ローカル変数が生成され、ブロックの各エントリとブロックから削除されるため、呼び出し間でデータを保持することはできません。ただし、値を保持するためにstatic修飾子を使用できます。
グローバル変数
- 多数のグローバル変数を使用すると、プログラムエラーが発生する可能性があります。
- それが引き起こす主な問題は、プログラム全体に広がるグローバル変数による変更の偶発的な発生です。
- また、コードのリファクタリングを行う必要性が高まる可能性があります。これは、プログラムコード全体が再構築される非常に広範なプロセスです。
結論:
ローカル変数とグローバル変数の両方が必要であり、プログラムの作成中に等しく必要です。ただし、大規模なプログラムでは、グローバル変数に不要な変更を引き起こす可能性があるため、多数のグローバル変数を宣言すると問題が発生する可能性があります。そして、プログラムのどの部分がその変更を行ったかを特定するのは難しくなります。したがって、不要なグローバル変数を宣言することは避けてください。