C++ 變數作用域

C++ 變數作用域

作用域是程式的一個區域,一般來說有三個地方可以定義變數:

  • 在函式或一個程式碼塊內部宣告的變數,稱為區域性變數。

  • 在函式引數的定義中宣告的變數,稱為形式引數。

  • 在所有函式外部宣告的變數,稱為全域性變數。

我們將在後續的章節中學習什麼是函式和引數。本章我們先來講解什麼是區域性變數和全域性變數。

區域性變數

在函式或一個程式碼塊內部宣告的變數,稱為區域性變數。它們只能被函式內部或者程式碼塊內部的語句使用。下面的例項使用了局部變數:

例項

#include <iostream> using namespace std; int main () { // 區域性變數宣告 int a, b; int c; // 實際初始化 a = 10; b = 20; c = a + b; cout << c; return 0; }

全域性變數

在所有函式外部定義的變數(通常是在程式的頭部),稱為全域性變數。全域性變數的值在程式的整個生命週期內都是有效的。

全域性變數可以被任何函式訪問。也就是說,全域性變數一旦宣告,在整個程式中都是可用的。下面的例項使用了全域性變數和區域性變數:

例項

#include <iostream> using namespace std; // 全域性變數宣告 int g; int main () { // 區域性變數宣告 int a, b; // 實際初始化 a = 10; b = 20; g = a + b; cout << g; return 0; }

在程式中,區域性變數和全域性變數的名稱可以相同,但是在函式內,區域性變數的值會覆蓋全域性變數的值。下面是一個例項:

例項

#include <iostream> using namespace std; // 全域性變數宣告 int g = 20; int main () { // 區域性變數宣告 int g = 10; cout << g; return 0; }

當上面的程式碼被編譯和執行時,它會產生下列結果:

10

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

當局部變數被定義時,系統不會對其初始化,您必須自行對其初始化。定義全域性變數時,系統會自動初始化為下列值:

資料型別初始化預設值
int 0
char '\0'
float 0
double 0
pointer NULL

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