字符常量是用單引號括起的單一字符,如 'a'、'9'、'!'。單引號僅作定界,不屬於字符本身。字符常量中不能直接包含單引號 ' 或反斜槓 \,需用轉義字符表示。
在 C 語言中,字符按其 ASCII 碼值 儲存,佔 1 位元組(8 位元)。例如:
| 字符 | ASCII (十進制) |
|---|---|
| ! | 33 |
| 0 | 48 |
| A | 65 |
| a | 97 |
注意區別: '9' 是字符常量(ASCII 57),9 是整型常量(數值 9),兩者含義與儲存方式截然不同。
因字符常量實際按整數(short 型)儲存,故可參與算術運算:
'a' - 32; // 97 - 32 = 65 ('A')
'A' + 32; // 65 + 32 = 97 ('a')
'9' - 9; // 57 - 9 = 48 ('0')
字符串常量用雙引號括起,如 "China"、"C program"。雙引號僅作定界。字符串在記憶體中以 空字符 \0 (ASCII 0) 結尾,系統自動在末尾添加。因此長度為 n 的字符串常量佔 n+1 位元組。
關鍵區別:
'A':字符常量,佔 1 位元組"A":字符串常量,佔 2 位元組('A' + '\0')轉義字符以 \ 開頭,後跟一個字符或八/十六進制數,用於表示不可列印的控制字符或特殊字符。
| 轉義字符 | 意義 | ASCII 碼 |
|---|---|---|
| \n | 換行 | 10 |
| \t | 水平製表 | 9 |
| \v | 垂直製表 | 11 |
| \f | 換頁 | 12 |
| \r | 歸位 | 13 |
| \\ | 反斜槓 \ | 92 |
| \' | 單引號 ' | 39 |
| \" | 雙引號 " | 34 |
| \? | 問號 ? | 63 |
| \0 | 空字符 | 0 |
| \ddd | 三位八進制數(如 \101 = 'A') | - |
| \xhh | 兩位十六進制數(如 \x41 = 'A') | - |
\v、\f 對螢幕無影響,但會影響列印機' 和 \;字符串常量中使用 " 和 \ 時,必須加反斜槓轉義char c1 = '\n'; // 換行字符
char c2 = '\''; // 單引號字符
char *str = "He said: \"Hello\"\n"; // 含雙引號與換行的字符串
printf("%s", str);