C++ 中的變數作用域



作用域是程式的一個區域,廣義上講,變數可以在三個地方宣告:

  • 在函式或塊內,稱為區域性變數;

  • 在函式引數定義中,稱為形式引數;

  • 在所有函式之外,稱為全域性變數;

C++ 變數作用域主要分為兩類:

  • 區域性變數
  • 全域性變數

我們將在後續章節學習什麼是函式及其引數。這裡讓我們解釋一下區域性變數和全域性變數。

C++ Variable Scopes

區域性變數

在函式或程式碼塊內宣告的變數是區域性變數。只有函式或程式碼塊內的語句才能使用它們。區域性變數對於函式外部是未知的。

示例

以下是使用區域性變數的示例:

#include <iostream>
using namespace std;
 
int main () {
   // Local variable declaration
   int a, b;
   int c;
 
   // actual initialization
   a = 10;
   b = 20;
   c = a + b;
 
   cout << c;
 
   return 0;
}

全域性變數

全域性變數定義在所有函式之外,通常位於程式的頂部。全域性變數將在程式的整個生命週期中保持其值。

任何函式都可以訪問全域性變數。也就是說,全域性變數在其聲明後即可在整個程式中使用。

示例

以下是使用全域性變數和區域性變數的示例:

#include <iostream>
using namespace std;
 
// Global variable declaration
int g;
 
int main () {
   // Local variable declaration
   int a, b;
 
   // actual initialization
   a = 10;
   b = 20;
   g = a + b;
  
   cout << g;
 
   return 0;
}

區域性變數和全域性變數同名

程式可以為區域性變數和全域性變數使用相同的名稱,但函式內部區域性變數的值將優先。

示例

#include <iostream>
using namespace std;
 
// Global variable declaration
int g = 20;
 
int main () {
   // Local variable declaration
   int g = 10;
 
   cout << g;
 
   return 0;
}

編譯並執行上述程式碼後,會產生以下結果:

10

訪問全域性變數

當存在同名區域性變數時,可以使用**作用域解析運算子** **::** 在變數名前訪問全域性變數。

示例

在下面的示例中,我們具有同名的全域性變數和區域性變數,並訪問和列印全域性變數的值:

#include <iostream>
using namespace std;

// Global variable declaration:
int g = 20;

int main() {
   // Local variable declaration:
   int g = 10;

   cout << "Value of g (Local variable): " << g;
   cout << endl;
   
   cout << "Value of g (Global variable): " << ::g;

   return 0;
}

編譯並執行上述程式碼後,會產生以下結果:

Value of g (Local variable): 10
Value of g (Global variable): 20

初始化區域性變數和全域性變數

定義區域性變數時,系統不會對其進行初始化,必須自行初始化。全域性變數在定義時會由系統自動初始化,如下所示:

資料型別 初始化值
int 0
char '\0'
float 0
double 0
指標 NULL

良好的程式設計習慣是正確初始化變數,否則有時程式會產生意想不到的結果。

廣告