變數


字 面常數 儲存於記憶體之中,並與一個資料型態相關聯,現在的問題是如果您要將一個數值儲存在記憶體中,並在稍後再取回這個數值來使用,您該如何進行?顯然的您無法 取得方才寫下的字面常數,因為沒有任何關於字面常數儲存位置的資訊。

變數(Variable)提供一個有名稱的記憶體儲存空間,一個變數關係至一個資料型態、一個變數本身的值與一個變數的位址值。

變數資料型態決定了變數所分配到的記憶體大小;變數本身的值是指儲存於記憶體中的某個數值,而您可以透過變數名稱取得這個數值,這個數值又稱為 rvalue或 read value;而變數的位址值則是指變數所分配到的記憶體之位置,變數本身又稱為lvalue或 location value。

在C++中要使用變數,必須先宣告變數名稱與資料型態,例如:
int intNum;         // 宣告一個整數變數
double dblNum;   // 宣告一個倍精度浮點數變數

如上面所舉的例子,您使用int、float、double、char、bool等關鍵字(Keyword)來宣告變數名稱並指定其資料型態,變數在命名 時有一些規則,它不可以使用數字作為開頭,也不可以使用一些特殊字元,像是*&^%之類的字元,而變數名稱不可以與C++內定的關鍵字同 名,例如int、float、class等等。

變數的命名有幾個風格,主要以清楚易懂為主,初學者為了方便,當使用一些簡單的字母來作為變數名稱,這會造成日後程式維護的困難,命名變數時發生同名的情 況也會增加。

在過去曾流行過匈牙利命名法,也就是在變數名稱前加上變數的資料型態名稱縮寫,例如intNum用來表示這個變數是int整數資料型態,fltNum表示 一個float資料型態,然而隨著現在程式的發展規模越來越大,這種命名方式已經不被鼓勵。

過去的程式在撰寫時,變數名稱的長度會有所限制,但C++並不限制變數的長度,因而現在比較鼓勵用清楚的名稱或助憶文字來表明變數作用,通常會以小寫字母 作為開始,並在每個單字開始時第一個字母使用大寫,例如:
int ageForStudent;
int ageForTeacher;

像這樣的名稱可以讓人一眼就看出這個變數的作用,還可以考慮用底線來區隔變數中的每個字面,例如:
int age_for_student;
int age_for_teacher;

在C++中宣告一個變數,就會配置一塊記憶體空間給它,空間長度依宣告時的資料型態而定,被配置的這塊空間中原先可能就有資料,也因此變數在宣告後的值是 不可預期的,所以應該在在變數宣告後初始其值,您可以使用「指定運算子」(Assignment operator)=來指定變數的值,例如:
int ageForStudent = 0;
double scoreForStudent = 0.0;
char levelForStudent = 'A';

上例中三個變數分別被初始為0、0.0與'A',您還可以使用隱喻的方式來宣告變數並指定初值,例如:
int ageForStudent(0);
double scoreForStudent(0.0);
char levelForStudent('A');


這兩種宣告方式在宣告變數的時候,同時指定變數的儲存值,而您也看到我們如何指定字元給字元變數,字元在指定時需使用引數 ' ' 來包括,在宣告變數之後,您可以直接呼叫變數名稱來取得其所儲存的值,下面這個程式是個簡單的示範:

#include <iostream> 
using namespace std;

int main() {
int ageForStudent;
double scoreForStudent;
char levelForStudent;

cout << "\n年級\t得分\t等級";
cout << "\n" << ageForStudent
<< "\t" << scoreForStudent
<< "\t" << levelForStudent
<< "\n";

ageForStudent = 5;
scoreForStudent = 80.0;
levelForStudent = 'B';

cout << "\n年級\t得分\t等級";
cout << "\n" << ageForStudent
<< "\t" << scoreForStudent
<< "\t" << levelForStudent
<< "\n";

return 0;
}

在這個程式中,您首先宣告變數,但並沒有初始其值,所以第一次顯示時會出現不可預期的資料,而在指定變數的值之後,顯示變數值時就會出現指定的資料了,執 行結果如下所示:  
年級    得分    等級
1073830176      4.8579e-270     @

年級    得分    等級
5           80         B

您也可以在使用宣告變數後,使用以下的建構子(Constructor)方式將變數的值初始為0:
int ageForStudent = int();
double scoreForStudent = double();
char levelForStudent = char();

有時候您一但將數值指定給變數之後,就不允許再將其它值指定給同一變數,則您可以在宣告變數時使用const關鍵字來限定,如果程式中有其它程式碼試圖改 變這個變數,編譯器會先檢查出這個錯誤,例如:
const int maxNum = 10;
maxNum = 20;

這一段程式碼中的maxNum變數我們使用const來限定,所以它在指定為10之後,就不可以再指定值給它,所以第二次指定會被編譯器指出錯誤,在g+ +編譯器下,會出現這樣的錯誤訊息:
assignment of read-only variable `maxNum'

使用const來限定的變數,目的通常就是不希望其它的程式碼來變動它的值,例如用於迴圈計數次數的指定(迴圈之後就會學到),或是像圓周率PI的指定。

如果要宣告無號的整數變數,則可以加上unsigned關鍵字,例如:
unsigned int i ;

bool型態的變數雖然也可視為整數型態,但不能在宣告變數時加上unsigned來修飾。