字元常量由乙個單引號中包含乙個或多個字元組成。一些例子如下:
『a』 『xy』 『0』 『*』
所有源字符集中的字元均可用於字元常量中,除去單引號(『),
反斜槓(/),
及換行符,可以使用轉義字元來表示這些字元:
『/』』 『//』 『/n』
在字元常量中所有需要轉義的字元將在」
轉義字元」
一節描述。
3.3.1
字元常量的型別
字元常量具有int
型別,除非它們被明確地使用字首l
定義為寬字元(wchart_t),
如果乙個字元常量僅含有占有乙個位元組的字元,它的值將是執行時字符集中的字元碼。例如,常量a
在ascii
編碼中的十進位制值為97,
含有多個字元的字元常量其值因編譯器的不同而各異。
下面的**段測試輸入的值是否在1
和5之間(包括1
和5):
#include
int c = 0;
/* ... */
c = getchar( ); // read a character.
if ( c != eof && c > '0' && c < '6' ) // compare input to character
// constants.
如果char型別是有符號的,那麼字元常量的值也可能為負數,因為常量的值是char向int型別轉換的結果。例如,iso 8859-1,或稱ansi字符集,通常使用8-bit字符集,在它中,英磅的表示字元£,其十六進製制值為a3:
int c = '/xa3'; // symbol for pounds sterling
printf("character: %c code: %d/n", c, c);
如果執行時字符集為iso 8859-1,且型別char是有符號的,那麼上面例子中的printf語句將產生如下輸出:
character: £ code: -93
在乙個不使用單位元組字元的程式中,你可以使用寬字元常量,寬字元常量具有型別wchar_t,使用字首l,如下面這些例子:
l'a' l'12' l'/012' l'/u03b2'
包含單個多位元組字元的寬字元常量的值為標準函式mbtowc()3.3.2的返回值。
轉義字元
轉義字元以反斜槓/
開始,表示乙個單字元,轉義字元允許你表示任意字元常量和字串常量,包括不可列印字元和具有特殊意義的字元,例如』
和」,
table 3-3
列出了c
中公認的轉義字元。
table 3-3. escape sequences
轉義字元
字元值輸出裝置上的動作 /』
單引號(』)
可列印字元
/』』雙引號(」) /?
問號(?) //
反斜槓(/) /a
警報 產生乙個聽得見或可見的訊號 /b
退格 從當前位置向前移動乙個字元 /f
換頁 從當前位置移動到下乙個新頁的開始 /n
換行 從當前位置移動到下乙個新行的開始 /r
回車 從當前位置移動到當前行的開始 /t
水平tab
從當前位置移動乙個水平tab鍵
/v垂直tab
從當前位置移動乙個垂直tab鍵
/o,/oo,
或/ooo
八進位制字元
可列印字元
/xh[h…]
十六進製制字元
/uhhhh
/uhhhhhhhh
通用字元名
如表table 3.3
所示,通用字元名也可使用轉義字元,通用字元允許指定擴充套件字符集中任意的字元,而不管使用的是何種編碼方式。
你可使用八進位制或十六進製制轉義字元來表示在型別unsigned char
的取值範圍內的任意字元碼,或者在型別wchar_t
取值範圍內的任意寬字元碼。如table 3-4.
table 3-4. examples of octal and hexadecimal escape sequences
八進位制
十六進製制 描述
『/0』
『/x0』
null
『/033』 『/33』
『/x1b』
esc『/376』
『/xfe』
254『/417』
『/x10f』
非法,其值超過unsigned char
的取值範圍
l』/417』
l』/x10f』
寬字元常量,型別為wchar_t -
l』/xf82』
寬字元常量
表中沒有最後乙個常量l』/xf82』
對應的八進位制表示,因為八進位制轉義字元不能容納三個八進位制數字,同樣,寬字元常量l』/3702』
包含兩個字元,分別為l』370』
和l』2』
。
C核心技術手冊(二十)
在c 中,常量是表示乙個固定值的記號,它可能是整型 浮點型 字元 或乙個串。乙個常量的型別由它的值和記法來決定。這裡討論的常與混合常量不同,混合常量在c99 標準中介紹,它通常是可修改的物件,類似於變數,了解混合常量的詳細介紹和特殊操作可參見第五章。乙個整型常量可以以普通的十進位制數表示,或者是八進...
C核心技術手冊(十二)
1.7.2 符號 符號可以為任意乙個關鍵字 識別符號 常量 字串 標點符號 函式 操作符 兩字母詞等符合語法規則的表示式,如下c 語句報含5 個符號 printf hello,world.n 單獨的符號為 printf hello,world.n 符號被預編譯器在翻譯的第三階段解釋,與第七階段編譯器...
C核心技術手冊(二十四)
在 c中,不同型別的操作可以化合成乙個操作,例如,下面的表述式 double dvar 2.5 define dvar as a variable of type double.dvar 3 multiply dvar by an integer constant.if dvar 10l compa...