1. 程式人生 > >【C/C++】符號常量 常變數

【C/C++】符號常量 常變數

1.常量

在程式執行過程中,其值不能被改變的量叫做常量。

常用的常量有如下幾類:

整型常量

實型常量

字元常量

       普通字元

       轉義字元 如:\\表示一個反斜線;\n表示換行,將當前位置移到下一行的開頭;\r表示回車,將當前位置移到本行的開頭。

字串常量

符號常量

符號常量不佔記憶體,只是一個臨時符號,預編譯結束後這個符號就不存在了。用識別符號代表一個常量,使用之前必須定義。例如巨集定義和列舉元素。

巨集定義用#define指令,指定用符號名稱代表一個常量。

例如:#define NUM 100 //NUM為符號常量,100為整型常量

列舉提供了一種替代的方法,它不但定義了整數常量,而且還把它們組成一個集合。

例如:enum Weekday{SUN, MON, TUES, WED, THU, FRI, SAT}; //SUN,MON等均為符號常量。第一個列舉成員的預設值為整型的0,後續列舉成員的值在前一個成員上加1

2.常變數

常變數具有變數的基本屬性:有型別,佔儲存單元,只是不允許改變其值。常變數在定義時必須顯式初始化。如:const int a=3;

int &r=5; //編譯錯誤

這條語句出現編譯錯誤,原因是文字常量不可定址,因而無法為文字常量建立引用。

下面這條語句又是合法的:

const int &r=5;   //引用一個不可定址的常量,要用const引用。

原因是編譯器將一個文字常量轉化成常變數的過程。在資料區開闢一個值為5的無名整型常變數,然後將引用r與這個整型常變數進行繫結。const引用不可定址的常量,編譯期會生成一個臨時量。

3.符號常量和常變數比較

定義符號常量:#define PI 3.1415926               //注意後面沒有分號

定義常變數  :const float PI=3.1415926;

符號常量 pi 和常變數 PI 都代表3.1415926,在程式中都能使用,只是二者的性質有所差別,定義符號常量使用#define 指令,是預編譯指令,只是使用一個符號常量代表一個字串,在預編譯是僅僅進行字元替換,在預編譯之後符號常量不存在了(全部換成了3.1415926),對符號常量的名字是不分配記憶體的。常變數要佔據記憶體空間,有變數值,只是這個值不改變。

符號常量和常變數都能用來定義陣列維數,陣列大小必須能在編譯期確定。這意味著非const的變數不能被用來指定陣列的維數。

使用的角度來看,常變數具有符號化常量的優點,而且使用更加方便。