變數

C++ 變數宣告、指派與取值的實作

在 C++ 中,變數 (variable) 是用來儲存資料的命名儲存區。在使用任何變數之前,我們必須先宣告 (declare) 它。本教材將帶你了解 C++ 變數宣告的不同方式、如何為變數指派 (assign) 值,以及如何取值 (access)


1. 變數的宣告 (Declaration)

宣告變數是告訴編譯器:「我需要一塊記憶體來儲存某種型態的資料,這塊記憶體的名稱叫做...」。

基本宣告

這是最簡單的宣告方式,只宣告變數的型態和名稱。此時環境會依型態的設定,配置一份目前未使用的記憶體,但記憶體中儲存的是一個不確定的垃圾值 (garbage value)。變數就是該記憶體的名稱(代號),接下來設計師可以在該變數的有效區域中,透過變數存取該變數代表的記憶體。

int my_age;      // 宣告一個名為 my_age 的整數變數
double salary;   // 宣告一個名為 salary 的雙精度浮點數變數
char initial;    // 宣告一個名為 initial 的字元變數

宣告並初始化 (Initialization)

宣告並初始化是在宣告變數的同時為它賦予一個初始值。這是一個好習慣,可以避免使用未初始化的變數,從而減少錯誤。

C++ 支援多種初始化方式:

  1. 複製初始化 (Copy Initialization)
    使用等號 = 來初始化變數。
    int my_age = 25;
    double salary = 50000.0;
    char initial = 'J';
    
  2. 直接初始化 (Direct Initialization)
    使用小括號 () 來初始化,類似函式呼叫。
    int my_age(25);
    double salary(50000.0);
    char initial('J');
    
  3. 列表初始化 (List Initialization) (推薦)
    使用大括號 {} 來初始化。這是 C++11 引入的,被認為是最安全的初始化方式,因為它可以防止窄化轉換 (narrowing conversion),例如將 double 賦予 int 而造成資料遺失。
    int my_age{25};
    double salary{50000.0};
    char initial{'J'};
    
    // 錯誤範例:int my_int{3.14};  // 編譯器會報錯
    


2. 變數的指派 (Assignment)

指派是在變數已經被宣告後,再為它賦予一個新值。

基本指派

使用等號 = 來進行指派。

int my_score;
my_score = 95;  // 為 my_score 變數指派值 95
my_score = 100; // 將 my_score 的值更新為 100

鏈結指派 (Chained Assignment)

可以將同一個值指派給多個變數。

int a, b, c;
a = b = c = 10;  // 從右到左執行,所有變數最終都為 10

3. 變數的取值與實作 (Accessing Variables)

取值是取得變數所儲存的資料,並在程式中使用它。

基本取值

只要變數名稱不是在 '=' 左側,就是取值。

#include <iostream>
using namespace std;
int main() {
    int score = 95;
    
    // 使用 cout 將變數的值輸出到螢幕
    cout << score;
    
    // 使用變數進行運算
    int bonus = 5;
    int total_score = score + bonus;
    cout << total_score;
    
    return 0;
}

變數的使用時機

  • 表達式 (Expression):在數學運算、邏輯判斷等表達式中使用。
    int result = (10 + 20) * 5;
    if (result > 100) {
        // ...
    }
    
  • 作為函式參數:將變數的值傳遞給函式。
    void print_value(int value) {
        cout<< value ;
    }
    
    int num = 42;
    print_value(num);
    


4. 實作範例:一個完整的程式

這個範例程式展示了變數的宣告、初始化、指派與取值的完整流程。

#include <iostream>
using namespace std;
int main() {
    // 變數命名示範:使用蛇形命名法
    int rectangle_length{10};      // 列表初始化
    int rectangle_width = 5;       // 複製初始化
    
    // 進行運算並指派給新變數
    int rectangle_area = rectangle_length * rectangle_width;
    
    // 輸出結果
    cout << rectangle_length << endl;
    cout << rectangle_width << endl;
    cout << rectangle_area << endl;
    
    // 變數的重新指派
    rectangle_length = 15;
    rectangle_area = rectangle_length * rectangle_width; // 重新計算面積
    
    // 輸出更新後的結果
    cout << rectangle_length << endl;
    cout << rectangle_area << endl;
    
    return 0;
}

5. 變數命名的規則與原則

良好的變數命名可以讓程式碼更容易閱讀和理解。請遵循以下規則和建議:

命名規則 (Grammar Rules)

這是編譯器強制執行的規則,如果違反,程式會編譯失敗。

  • 大小寫字母、數字與底線:變數名稱可以包含大寫字母 (A-Z)、小寫字母 (a-z)、數字 (0-9) 和底線 (_)。
  • 不可用數字開頭:變數名稱不能以數字開頭。例如,1_name 是不合法的。
  • 區分大小寫:C++ 區分大小寫。myVarmyvar 是兩個不同的變數。
  • 不可使用關鍵字:不能使用 C++ 的保留關鍵字作為變數名稱,例如 intclassreturn 等。

命名原則 (Style Guidelines)

這些是程式設計師社群普遍認同的建議,遵循這些原則可以讓你的程式碼更具可讀性。

  • 語意清晰:變數名稱應該清晰地表達它的用途。例如,用 student_age 比用 sa 更好。
  • 使用慣例:選擇一種命名慣例並貫徹使用。
    • 蛇形命名法 (snake_case):所有字母都是小寫,單字之間用底線分隔。
      範例:user_name, total_count
    • 駝峰式命名法 (camelCase):第一個單字小寫,後續每個單字的第一個字母大寫。
      範例:userName, totalCount
    • 匈牙利命名法 (Hungarian notation):在變數名稱前加上縮寫來表示資料型別。
      範例:iCount (整數), strName (字串)
      注意: 現代 C++ 程式碼中,由於 auto 和強型別的盛行,這種命名法已較少使用。

返回課程目錄
許老師APCS線上家教

留言

這個網誌中的熱門文章

目錄

資料型態

Code::Blocks