C++區域性變數和全域性變數(詳解版)

2020-07-16 10:04:40
區域性變數定義在一個函數內部,在函數之外是不可存取的。全域性變數定義在所有函數之外,並且在其作用域內的所有函數都可以存取。下面做詳細講解。

區域性變數

函數中定義的變數是該函數的區域性變數。它們在其他函數的語句中是不可見的,通常無法存取它們。下面的程式顯示,由於函數中定義的變數被隱藏,所以其他函數可以擁有名稱相同但實際上互不相干的變數。
#include <iostream>
using namespace std;

void anotherFunction() ; // Function prototype
int main()
{
    int num = 1; // Local variable
    cout << "In main, num is " << num << endl;
    anotherFunction();
    cout << "Back in main, num is still " << num << endl;
    return 0;
}
void anotherFunction()
{
    int num = 20; // Local variable
    cout << "In anotherFunction, num is " << num << endl;
}
程式輸出結果:

In main, num is 1
In anotherFunctionr, num is 20
Back in main, num is still 1

雖然有兩個名為 num 的變數,但是程式在同一時間只能“看到”其中一個,因為它們在不同的函數中。當程式在 main 中執行時,main 中定義的 num 變數是可見的。當呼叫 anotherFunction 時,只有在其中定義的變數是可見的,所以 main 中的 num 變數是隱藏的。圖 1 顯示了兩個函數的封閉性質,這些框代表變數的作用域。

局部變量及其作用域
圖 1 區域性變數及其作用域