2.3.4 字符串常量
C++語言除了允許使用字符常量外,還允許使用字符串常量。字符串常量是一對雙引號括起來的字符序列,簡稱為字符串。字符串常量中除一般字符外,還可以包含空格、轉義序列符或其他字符(如漢字)等。例如:
"Hello, World!\n" "C++語言"
等都是合法的字符串常量。字符串常量的字符個數稱為字符串長度。若只有一對雙引號(“”),則這樣的字符串常量的長度為0,稱為空字符串。
書中表示字符串的一對雙引號“”是漢字字符,在程序代碼中是不可以的,它們只能用""來表示;類似的,一對單引號‘’在程序代碼中也只能用''表示的。注意不要在程序代碼中誤用這些漢字字符。
由于雙引號是字符串的分界符,因此如果需要在字符串中出現雙引號則必須用“\"”表示。例如:
"Please press \"F1\"to help! "
這個字符串被解釋為:
Please press "F1" to help!
字符串常量應盡量在同一行書寫,若一行寫不下,可用“\”來連接,例如:
"ABCD \ EFGHIGK... "
需要說明的是,對于整數、實數和字符常量來說,其數據類型是確定的,也就是說,當操作這些數據時,它們所需要的內存空間大小也是確定的。而字符串常量則不然,由于不同的字符串所包含的字符個數不一樣,因而不同字符串所需的內存空間大小也各不相同。
為了能確定字符串操作時所需內存空間的大小,保證字符串在內存空間中存取的正確性,C++在將字符串的字符依次存放在內存空間后,還會在其后存入一個‘\0’字符。‘\0’用做字符串所占內存空間的結束標志,稱為字符串的結束符。這樣,當字符串從內存空間中依次提取時,首先判斷取出的字符是否為結束符,若是,則字符串提取結束,從而保證了字符串存取的正確性。
討論:若在字符串中指定‘\0’,則這樣的字符串的長度和字節大小各為多少呢?例如:“AB\CD\t\0\n”。
當字符串存放在內存空間時,系統會將其所包含的字符連同結束符‘\0’依次存放,每個ASCII字符占1個字節,因此需要8個字節的內存空間,如圖2.6所示。
但提取時,由于先遇到第一個‘\0’字符,C++就會將其視為結束標志,提取出來的字符串是第一個‘\0’前的字符序列,即“AB\CD\t”,因此該字符串的長度為5。

圖2.6 字符串存儲示意
需要強調的是,不要將字符常量和字符串常量混淆不清,它們的主要區別如下:
(1)字符常量用單引號括起來的,僅占 1個字節;而字符串常量是用雙引號括起來的,至少需要兩個字節,但空字符串除外,它只需要 1 個字節。例如:字符串“a”的字符個數為1,即長度為1,但它所需要的字節大小不是1而是2,因為除了字符a需要1個字節外,字符串結束符‘\0’還需1個字節,如圖2.7所示。

圖2.7 “a”和‘a’的區別
(2)內存中,字符是以 ASCII 碼值來存儲的,因此可將字符看做是整型常量的特殊形式,它可以參與常用的算術運算,而字符串常量則不能。例如:
int b='a'+3; // 結果b為100,這是因為‘a’的ASCII碼值97參與了運算
- Apache Oozie Essentials
- LabVIEW程序設計基礎與應用
- Monkey Game Development:Beginner's Guide
- Building a Game with Unity and Blender
- C# 從入門到項目實踐(超值版)
- 人人都懂設計模式:從生活中領悟設計模式(Python實現)
- HTML5+CSS3網站設計基礎教程
- 學Python也可以這么有趣
- Scala編程實戰(原書第2版)
- 持續輕量級Java EE開發:編寫可測試的代碼
- Qt5 C++ GUI Programming Cookbook
- Hadoop 2.X HDFS源碼剖析
- Visual Basic 程序設計實踐教程
- Mastering Embedded Linux Programming
- 虛擬現實:引領未來的人機交互革命