---
# System prepended metadata

title: C++_區域/全域變數_初始化

---

# 區全域變數
## 變數的範圍 (Scope)
變數的範圍指的是變數**在程式中可被存取的區域**。
根據範圍的不同，變數可以分為：

### 區域變數 (Local Variable)：
* **宣告在函式或程式內**。
* **僅在宣告的區塊內有效**。
* 當區塊結束時，變數**所佔用的記憶體會被釋放**。

### 全域變數 (Global Variable)：
* **宣告在所有函式之外**。
* 在**程式的任何地方都可以存取**。
* 一旦宣告，就會一直存在，直到程式結束。

## 變數的存活期 (Lifetime)
變數的存活期指的是**變數在記憶體中存在的時間**。

### 自動變數 (Automatic Variable)：
* 通常是區域變數。
* 在進入作用域時被創建，離開作用域時被銷毀。
### 靜態變數 (Static Variable)：
* 可以是區域變數，也可以是全域變數。
* 如果是區域變數，則在函式第一次被呼叫時初始化，且在函式結束後不會被銷毀，下一次呼叫時，還是**保留**上一次的值。
* 如果是全域變數，則在程式開始執行時初始化，且在程式結束時銷毀。

# 變數的初始化
初始化是指在變數宣告時給**變數賦予一個初始值**。
eg.
```cpp=
int numbers = 0;
```

## 初始化的重要性：
避免使用未初始化的變數，這可能會導致不可預測的結果。
確保變數在使用前有正確的值。

## 初始化方式：
顯式初始化： 在宣告變數時直接賦值。
隱式初始化： 對於靜態變數，如果沒有顯式初始化，則會被自動**初始化為 0 或 null**。
eg.
```cpp=
#include <iostream>

int global_var = 10; // 全域變數

void Func() {
    int local_var = 20; // 區域變數
    static int static_local_var = 30; // 靜態區域變數

    std::cout << "global_var: " << global_var << std::endl;
    std::cout << "local_var: " << local_var << std::endl;
    std::cout << "static_local_var: " << static_local_var << std::endl;

    static_local_var++;
}

int main() {
    Func();
    Func();

    return 0;
}
```

## 哦哦
* **區域變數** 作用域有限，存活期短，每次函式呼叫都會重新初始化。
* **全域變數** 作用域廣，存活期長，但過多使用可能導致命名衝突和程式難以維護。
* **靜態變數** **結合了區域變數和全域變數的特點**，可以保留上次呼叫的值。
* **初始化** 是確保**變數有正確初始值的重要步驟**。

### 選擇合適的變數 
* **區域變數**： 適合用於**暫存局部計算結果**或控制流程的變數。
* **全域變數**： 適合用於**整個程式**都需要存取的變數，但要小心使用，避免命名衝突和耦合。
* **靜態變數**： 適合用於需要在函式多次呼叫之間保留值的變數。
## **NOTE**
* 避免過多使用全域變數： 全域變數會增加程式複雜度，降低可讀性。
* 注意變數的作用域和存活期： 避免在變數超出作用域後使用。
* 初始化變數： 確保每個變數在使用前都有正確的初始值。
選擇合適的變數類型和初始化方式，可以提高程式碼的可讀性。