天天看點

《C++程式設計教程(第3版)》——第2章,第3節常量和變量

本節書摘來自華章出版社《c++程式設計教程(第3版)》一書中的第2章,第2.3節常量和變量,作者張志航,更多章節内容可以通路雲栖社群“華章計算機”公衆号檢視

2.3 常量和變量

2.3.1 常量

在程式的運作過程中,其值不變的量稱為常量。程式設計者可以直接在程式中書寫常量。如在例1.2中有常量3和5。下面對各種類型的常量及其書寫形式做詳細介紹。

1.整型常量

1)十進制整型常量,如123、-456。

2)八進制整型常量,如0123、-016。

八進制整型常量以0(零)開頭,在數值中可以出現數字元号0~7。

3)十六進制整型常量,如0x123、-0xab。

十六進制整型常量以0x(零x)或0x開頭,在數值中可以出現數字元号0~9、a~f(或小寫的a~f)。

4)長整型與無符号型整型常量。

長整型常量,如12l、0234l、-0xabl、12l、0234l、-0xabl。

無符号型整型常量,如12u、0234u、0xabu、12u、0234u、0xabu。

在一個整型常量後加字尾l或l(小寫的l)表示該常量是長整型常量;在一個整型常量後加u或u(小寫的u)表示該常量是無符号型整型常量。

在程式中書寫的整型量,隻要它的數值範圍在int型量的範圍内,則它的預設資料類型是int型,而不是char型、short型或long型,如常量439是int型常量。

2.邏輯型常量

邏輯型常量隻有兩個,即true和false,分别代表邏輯“真”和邏輯“假”。

3.實型常量

實型常量在記憶體中以浮點形式存放,均為十進制數,無數制區分。兩種書寫形式如下所示。

1)小數形式:必須寫出小數點,如1.65、1.、.123均是合法的實型常量。

2)指數形式:也稱為科學表示法形式,如實型常量1.23×105和1.23×10-5在程式中可以書寫成1.23e5和1.23e-5。e或e前必須有數字,e或e後必須是整型量。例如,1000應寫成1e3,而不能寫成e3。

在程式中書寫的實型量,它的預設資料類型是double,而不是float,如1.23是double型量。如果想把一個實型常量表示成float型常量,可加字尾f或f,是以1.23e5f、1.23e5f、1.23f和1.23f均表示float型常量。

4.字元型常量

用單引号括起來的一個字元稱為字元型常量,如在程式中書寫的'a'、'a'、'?'和'#'分别表示4個字元,在記憶體中對應存放的是該4個字元的ascii碼值,其資料類型為char型。用這種方式隻能表示鍵盤上的可輸入字元,而ascii碼表(見附錄a)中的一些控制字元無法用這種方式表示。例如,ascii碼值為10的字元是控制字元,表示換行,無法用上述簡單方式表示。為此,c++提供了另外一種表示字元型常量的方法,即“轉義”字元。轉義字元是以反斜杠“”引導的特殊的字元型常量表示形式。一般地,'n'表示字母n,而'n'表示一個控制字元“換行”,跟随在“”後的字母n的意義發生了轉變,是以叫作轉義字元。在表2-3中列出了c++中預定義的轉義字元。

表2-3 c++中預定義的轉義字元

《C++程式設計教程(第3版)》——第2章,第3節常量和變量
《C++程式設計教程(第3版)》——第2章,第3節常量和變量

表2-3中倒數第2、3行是轉義字元的進階形式,它可以表示任一字元。例如,'n'表示控制字元“換行”,它的ascii碼是十進制數10,10的八進制和十六進制表示分别是12和a,是以'n'也可以表示成'12'、'xa'或'xa'。又如字母a的ascii碼是十進制數65,它的八進制和十六進制表示分别是101和41,是以在程式中,字母a可以表示成'a'、'101'或'x41'。特别注意表的最後一行,'0'是'ddd'的具體表示,其ascii碼值是0,它表示空字元,經常被用作字元串結尾标志。

5.字元串常量

字元串常量是用雙引号括起來的字元序列,如"china"、"how do you do."和"a"。字元串常量在記憶體中的存放形式是存儲其連續字元的ascii碼值,末尾加一個特殊字元'0',作為結尾标志,其意義見表2-3的最後一行。例如,字元串"china"在記憶體中的存儲形式如圖2-2所示。

注意:字元常量'a'和字元串常量"a"是不同的。字元常量'a'在記憶體中占用1位元組,而字元串常量"a"在記憶體中占用2位元組,如圖2-3所示。

2.3.2 符号常量

程式設計者可以在程式中直接書寫常量,但有時會遇到一些麻煩。例如,在進行數學計算時,程式中要多次使用π,則需要多次書寫3.141 592 6,這樣輸入程式時可能出現将數字輸入錯誤的情況。另外,計算時如果π的精度需要變化,如将3.141 592 6改為3.14,就需要在程式中進行多處修改。

c++提供了一種機制以避免上述麻煩。用一個辨別符代表一個常量,稱為符号常量。程式設計者可以在程式的開頭定義一個符号常量,令其代表一個值,在後續程式中可使用該符号常量。

符号常量的定義形式為:

define price 30

define pi 3.1415926

define s "china"

此3行代碼定義了3個符号常量,它們是price、pi和s。定義符号常量的好處是,如果在程式中多處使用了同一個常量,當需要對該常量修改時,隻需要在定義處修改一處即可,而不需要修改程式中的多處。給符号常量取有意義的名字有利于提高程式的可讀性,另外,一般使用大寫字母給符号常量命名。

下面用一個例子說明符号常量的使用。

例2.1 符号常量的使用。

`include

using namespace std;

define pi 3.14159

int main(void)

{

}`

程式中a行字元串"pi="中的pi是字元串常量的一部分,不是獨立的符号常量。

2.3.3 變量

在程式的運作過程中,其值可變的量稱為變量。一個變量有3個要素,即變量名、變量的存儲空間和變量的值。變量名必須用辨別符來辨別。變量根據其取值範圍的不同可分為不同類型的變量,如字元型變量、整型變量、實型變量等,是以不同類型的變量的存儲空間也不同。

1.變量定義

變量定義的一般格式為:

[<存儲類别>] <變量類型> <變量名1>,<變量名2>,…,<變量名n >

這裡不必關心變量的<存儲類别>,在後續有關章節中有詳細說明。定義變量的例子如下:

int a, b; // 定義2個整型變量a、b

unsigned u; // 定義1個無符号整型變量u

float f; // 定義1個單精度實型變量f

double d; // 定義1個雙精度實型變量d

char c1, c2, c3; // 定義3個字元型變量c1、c2、c3

變量必須先定義後使用,原因為:

1)變量定義指定變量的類型,編譯器根據類型給變量配置設定存儲空間,并建立變量名與其存儲空間的對應關系,程式中通過變量名給變量的存儲空間指派或讀取該存儲空間中的值,這一過程稱為變量的存取。

2)c++中某些運算對參加運算的資料類型有限制,變量具有類型後,便于編譯器對運算的合法性做檢查。

2.變量賦初值

當使用變量時,變量必須有值,給變量賦初值的方法有兩種,如下所示。

1)變量定義後,用指派語句賦初值。例如:

int a, b;

a = 12; b = -24;

char c1, c2;

c1 = 'a'; c2 = 'b';

此處“=”是指派運算符,表示将指派号右邊的值存入指派号左邊的變量對應的存儲空間中。

2)在定義變量的同時直接賦初值(稱為變量的初始化)。例如:

int a = 12, b = -24;

char c1 = 'a', c2 = 'b';

3.常變量

變量的值可以随時變化,即按需要給變量重新指派。但有時為了保護變量的值,不允許對變量做修改,則需要将變量說明成常變量,具體方法是在變量定義語句前加說明符const。例如:

const float pi = 3.14;

常變量定義時必須初始化。具體應用見函數形式參數等相關内容。

繼續閱讀