- C++語言程序設計
- 千鋒教育高教產品研發部編著
- 3242字
- 2019-07-30 17:37:43
2.1 變量與常量
數據類型是指對數據的解釋,它規范了不同數據在計算機內存儲空間的大小與存儲的具體形式。
2.1.1 標識符與關鍵字
現實世界中每個事物都有自己的名字,從而與其他事物區分開。例如,現實生活中每種交通工具都有一個名稱來標識,如圖2.1所示。
在程序設計語言中,同樣也需要對程序中的各個元素命名加以區分,這種用來標識常量、變量、自定義類型、函數和標號等元素的記號稱為標識符。
C++語言規定,標識符是由字母、數字和下畫線組成的,并且只能以字母或下畫線開頭的字符集合。在使用標識符時應注意以下幾點:
- 標識符中的大小寫字母是有區別的。
- 命名時應遵循見名知義的原則。
- 系統已用的關鍵字不得用作標識符。
關鍵字是系統已經定義過的標識符,它在程序中已有了特定的含義,如int、char等。C++中的關鍵字都是小寫字母,表2.1列出了C++中的所有關鍵字。

圖2.1 現實生活中的標識符
表2.1 C++中的關鍵字

2.1.2 變量與賦值
日常生活中,例如,大家在淘寶購物的時候,都會有一個購物車,用來進行存儲用戶想購買的物品,等到所有的物品都挑選完成后,選擇結算即可,如圖2.2所示。

圖2.2 淘寶購物流程
進行結算時,要對多個數據進行求和,需先把這些數據先存儲起來,再對這些數據進行累加。在C++中,若要存儲數據,需要用到變量。變量可以理解為淘寶購物車中存儲的物品,如蘋果、水等。變量的賦值是通過等號來表示的,進行結算時是每個變量進行相加的過程。示例代碼如下:

上述示例中,apple、water、sum都是變量,其中,apple和water變量就好比購物車中存儲的物品,它們分別存儲的數據是20和7。sum變量存儲的數據是apple和water這兩個物品的數據累計之和。
2.1.3 變量的類型
變量用來存儲數據,那么大家來思考一下:如何選擇合適的容器來存放數據才不至于浪費空間,可以保存什么樣的數據呢?在介紹數據類型之前,先來看一個生活中的例子。比如,某公司要快遞一本書,文件袋和紙箱都可以裝載,但是,如果使用紙箱裝一本書,顯然有點大材小用,浪費紙箱的空間,如圖2.3所示。
同樣,大家如果在使用變量進行存儲數據時,為了更充分地利用內存空間,可以為變量指定不同的數據類型。C++數據類型如圖2.4所示。

圖2.3 紙箱與文件袋快遞一本書

圖2.4 C++數據類型
在圖2.4中,可看到C++提供的基本數據類型有整型、實型、字符型和空型;復合類型有指針型、引用型;構造類型有數組、枚舉、結構體、聯合體、類。這些類型中不同于C語言的主要是引用型與類,這兩種類型將在后面的章節中詳細講解,整個面向對象程序設計的學習都是圍繞類展開的。
有關基本數據類型的說明如表2.2所示,其中數據長度在不同的操作系統下編譯器對應的值有可能不相同,需要參考相應的手冊。
表2.2 C++基本數據類型

說明:
(1)無符號(unsigned)和有符號(signed)的區別在于數值最高位的含義。對于signed類型來說,最高位是符號位,其余各位表示數值大小,而unsigned類型的各個位都用來表示數值大小,因此相同基本數據類型的signed和unsigned的數值范圍是不同的。
(2)許多C++版本還有布爾型(bool),即值為true或false。事實上,在計算機編譯系統中將true表示成整數1,false表示成整數0,因此也可以把布爾型看成是一個整型。
2.1.4 常量
在程序執行過程中,其值不能改變的量稱為常量。普通常量的類型是根據數據的書寫形式來決定的。如100是整型常量,0.5是實型常量,'q'是字符型常量,"qianfeng"是字符串常量。
1. 整型常量
在C++中,使用的整型常量可以用八進制、十進制和十六進制3種方式表示,具體如下所示:
- 十進制整型常量是最常用的一種表示形式,如321、-123。
- 八進制整型常量以0開頭作為前綴,其數碼取值為0~7,如025、-066。
- 十六進制整型常量以0x或0X開頭作為前綴,其數碼取值為0~9、A~F或a~f,如0xffff、-0X15。
整型常量在表示時,除了用前綴表示進制外,有時還需要用到后綴表示long、unsigned修飾符。當表示長整型常數時,需要在該數的后面加上L或l,如2345L;當表示無符號整型常數時,需要在該數的后面加上U或u,如4567U。
2. 實型常量
實型常量又稱浮點型常量,它由整數部分和小數部分組成,其表示形式有以下兩種形式:
- 小數表示形式,它由數字和小數點組成,不可省略小數點,但可以省略整數部分或小數部分數字,如1.、.21。
- 指數表示形式,它由小數表示法后加e(或E)和指數組成,指數部分可正可負,但必須是整數,并且e前邊必須有數字,如1.23e-5、.23e6。
實型常量分單精度、雙精度和長雙精度3類,它們用后綴加以區分,不加后綴的為雙精度浮點型常量,如2.12;加后綴F或f的為單精度浮點型常量,如2.12f;加后綴L或l的為長雙精度浮點型常量,如0.56e7L。
3. 字符型常量
用一對單引號括起來表示的形式就是字符型常量。在內存中,字符數據以ASCII碼的形式存儲,在一定范圍內可以與整數相互賦值,但含義有所不同。ASCII碼是一種給字符編碼的國際標準,它以整數表示字符,比如十進制數65,表示字符'A'。此處注意數字與字符的區別,如4與'4'是不同的,4是整數,'4'是字符,對應的ASCII碼值為52。
在C++中,有些特殊字符用轉義字符表示,轉義字符以反斜杠“\”開頭,后跟若干個字符。轉義字符具有特定的含義,不同于字符原有的意義,故稱轉義字符,表2.3列出了常用的特殊字符。
表2.3 常用的轉義字符及含義

在表2.3中,'\ddd'和'\xhh'都是用ASCII碼表示一個字符,如'\101'和'\x41'都是表示字符'A'。轉義字符在輸出中有許多應用,如想讓計算機的喇叭發出響聲,可以使用下面的語句。
cout << '\a';
如果需要在屏幕上輸出以下內容:
小千對小鋒說:"遇到IT技術難題,就上扣丁學堂"。
不能使用以下方法:
cout <<"小千對小鋒說:"遇到IT技術難題,就上扣丁學堂"。"<<endl;
因為雙引號在C++中是有特殊作用的,上述寫法會使編譯器產生錯誤,正確的語句如下所示:
cout <<"小千對小鋒說:\"遇到IT技術難題,就上扣丁學堂\"。"<<endl;
4. 字符串常量
字符串常量是由一對雙引號括起來的字符序列。被括起來的字符序列可以是一個字符,也可以是多個字符,還可以沒有字符。如"q"、"qian"、""。字符串常量都有一個結束符,用來標識字符串的結束,該結束符是'\0',即ASCII碼值為0的空字符。
對于初學者,經常混淆字符與字符串的概念,它們是不同的量,兩者區別如下:
- 字符用單引號括起來,字符串用雙引號括起來;
- 字符與字符串占用的內存空間不同,字符只占用一個字節的空間,而字符串占用的內存字節數等于雙引號中的字符個數加1,如字符'q'和字符串"q"在內存中的情況是不同的,字符'q'在內存中占一個字節,而字符串"q"在內存中占兩個字節,如圖2.5所示。

圖2.5 字符'q'與字符串"q"在內存中的表示
5. 符號常量
有一種特殊的常量是用標識符來表示的,稱為符號常量。符號常量主要用于幫助記憶和提高程序的可讀性與維護性。例如,程序中經常會用到圓周率,假設為3.14,如果程序想提高圓周率的精度到3.141 592 65,那么它在程序中出現的所有地方都需要做修改,大大降低了程序的維護性。這時如果用PI表示圓周率,每次使用時都寫PI,那么在需要修改PI的精度時,只需要修改PI的初值就可以了。在C++中,為了保持與C語言的兼容,允許程序用編譯預處理指令#define來定義一個符號常量,上面的圓周率可以通過如下定義:
#define PI 3.14159265
這條指令的格式是#define后跟一個標識符和一串字符,中間用空格隔開。由于它不是C++語句,因此此行沒有分號。在程序編譯時,編譯器首先將程序中的PI用3.14159265來替換,然后再進行代碼編譯。標識符后面的內容實際上是一個字符串,編譯器本身不會對其進行任何語法檢查,僅僅是在程序中將標識符簡單替換為字符串,因此,有時會帶來意想不到的錯誤。
6. const常量
在定義變量時,可以使用const關鍵字來修飾,這樣的變量是只讀的,即在程序中不能對其修改,只能讀取。由于不可修改,因而它是一個符號常量,且在定義時必須進行初始化。需要說明的是,通常將符號常量中的標識符寫成大寫字母易于與其他標識符區分。用const關鍵字定義符號常量的格式如下:
const數據類型 常量名=初值表達式;
上面的圓周率可以通過如下定義:
const double PI=3.14159265;
const還可以放在數據類型名后,具體示例如下:
double const PI=3.14159265;
注意下面的語句是錯誤的:

接下來演示通過const關鍵字定義符號常量,如例2-1所示。
例2-1

運行結果如圖2.6所示。

圖2.6 例2-1運行結果
在例2-1中,第3行通過const關鍵字定義一個符號常量PI表示圓周率。第7行中使用圓周率就可以用PI來代替。
- VMware View Security Essentials
- C語言程序設計實踐教程(第2版)
- Android Application Development Cookbook(Second Edition)
- Easy Web Development with WaveMaker
- Creating Stunning Dashboards with QlikView
- HTML 5與CSS 3權威指南(第3版·上冊)
- Cybersecurity Attacks:Red Team Strategies
- UI設計全書(全彩)
- Java EE Web應用開發基礎
- Oracle Database XE 11gR2 Jump Start Guide
- Python面試通關寶典
- 3D Printing Designs:The Sun Puzzle
- Elasticsearch搜索引擎構建入門與實戰
- RESTful Web API Design with Node.js(Second Edition)
- Laravel 5.x Cookbook