---
# System prepended metadata

title: 第二十周 區域變數和全域變數

---

# 第二十周 區域變數和全域變數
* 變數是一種在程式執行過程中暫時存放資料的記憶空間，對應的變數名稱就是指向該空間的識別代號。變數都有其有效範圍(scope)，如果是宣告在func1()函式內的變數，則其有效範圍只在該函數內部，離開這個有效範圍─譬如說在別的函式或是呼叫func1()的主程式裡，就不能夠使用這個變數。這些僅存活在函式內部的變數，就稱為區域變數(local variable)。

* 定義在函式內部的變數就是區域變數，通常我們會把這些變數宣告在函式一開始的位置，但並非一定要放在開始位置不可。譬如我們可以把變數宣告在迴圈或者if-then-else區塊內，由於迴圈或if判斷區塊是函式內的一個程式區塊，所以這個變數的有效範圍將只有在迴圈區塊或if區塊中，也就是該變數是屬於這個區塊的區域變數，離開這個區塊，就算還在同樣的函式裡，也不能使用這個變數。

## 練習
### 說明：處裡輸入資料以及負責計算總分與平均的此2自訂函式，沒有函式回傳值也沒有參數；則儲存成績的陣列以及儲存總分與平均的變數，便要宣告為全域變數；如此才能讓整隻程式內的所有函式存取
```cpp=
#include <iostream>
using namespace std;

int score[3];
int sum;
float avg;

void add()
{
    cout << "輸入3個成績(使用空白隔開)：";
    cin >> score[0] >> score[1] >> score[2];
}

void getSum_Avg()
{
    sum = 0;
    for (int v : score)
        sum += v;

    avg = sum / 3.0f;
}

int main()
{
    add();
    getSum_Avg();

    cout << "總分= " << sum << endl;
    cout << "平均= " << avg << endl;

    system("pause");
}
```