2.5 變數

什麼是變數?

圖 2-1:記憶體與變數的關係

變數是一個具名的記憶體空間,用來儲存資料。當你宣告變數時,編譯器會:

  1. 根據型態分配適當大小的記憶體
  2. 給該記憶體空間一個名字
  3. 追蹤這個變數的型態

變數的宣告與初始化

先講三個會一直用到的詞:

  • 宣告:告訴電腦「我要一個某型態、某名字的變數」,例如 int age;——電腦這時就會替 age 準備好空間。
  • 初始化:在宣告的同時就先給它一個起始值,例如 int height = 180;。這個「一宣告就順手給定值」的動作就叫初始化。
  • 指派:變數宣告之後再把值放進去(或改成別的值),例如後面那行 age = 18;
#include <iostream>
using namespace std;

int main() {
    int age;                 // 宣告(未初始化)
    int height = 180;        // 宣告同時初始化
    int score = 95, level = 5;  // 多個變數同時宣告

    age = 18;               // 之後指派值

    cout << "age: " << age << endl;
    cout << "height: " << height << endl;
    cout << "score: " << score << endl;
    return 0;
}

執行結果:

age: 18
height: 180
score: 95

變數的命名規則

C++ 對變數名有以下要求:

  1. 開頭必須是字母或底線 _,不能是數字
  2. 後續可以是字母、數字、底線
  3. 大小寫敏感(ageAge 是不同變數)
  4. 關鍵字不能當變數名(intiffor 等)

✓ 合法的名稱(這些都可以):

int age;
int age123;
int _private;
int currentScore;
int current_score;

✗ 不合法的名稱(這些會編譯失敗):

int 123age;          // 開頭是數字
int my-age;          // 含有減號(- 是運算子)
int current score;   // 中間有空格
int if;              // if 是關鍵字

全域變數 vs. 局部變數

變數宣告的位置,會決定它叫「全域」還是「局部」:

  • 全域變數:宣告在所有函式外面(包括 main() 外面)。整個程式從它宣告之後都看得到、用得到。
  • 局部變數:宣告在某個函式或 { } 區塊裡面(例如寫在 main() 裡)。只在它所屬的那個範圍內有效。
#include <iostream>
using namespace std;

int globalVar = 100;   // 全域變數:宣告在 main() 外面

int main() {
    int localVar = 50;  // 局部變數:宣告在 main() 裡面
    cout << globalVar << " " << localVar << endl;  // 兩個在這裡都看得到
    return 0;
}

變數的初始化

動手試試看

試著在程式中宣告幾個變數,使用 cin 讀入值,再用 cout 輸出:

#include <iostream>
using namespace std;

int main() {
    int age;
    int height;   // 身高(公分,用整數)

    cout << "Enter your age: ";
    cin >> age;
    cout << "Enter your height (cm): ";
    cin >> height;

    cout << "Your age: " << age << ", height: " << height << " cm" << endl;
    return 0;
}