在 C 语言中,字符型常数是指用单引号括起来的一个字符,它代表的是该字符在 ASCII 编码表中的整数值(一个整数)。

(图片来源网络,侵删)
合法的字符型常数可以分为以下几类:
普通可打印字符
这是最常见的形式,即键盘上可以输入的可见字符。
格式: '字符'
示例:

(图片来源网络,侵删)
'A' // 代表大写字母 A 'b' // 代表小写字母 b '9' // 代表数字字符 9 '$' // 代表美元符号 $ ' ' // 代表空格字符
注意:
- 必须使用单引号 ,而不是双引号 ,双引号代表的是字符串。
- 单引号内只能有一个字符。
'ab'是不合法的字符型常数,而是一个非法的表达式。
转义字符
当我们要表示一些特殊字符(如换行、制表符)或者无法直接输入的字符(如单引号本身)时,就需要使用转义字符。
转义字符由一个反斜杠 \ 后跟一个特定的字符或数字序列组成。
格式: '\转义序列'

(图片来源网络,侵删)
常见的转义字符:
| 转义序列 | 名称 | ASCII 值 | 说明 |
|---|---|---|---|
\n |
换行 | 10 | 光标移到下一行开头 |
\t |
水平制表 | 9 | 光标移到下一个制表位 |
\r |
回车 | 13 | 光标移到当前行开头 |
\\ |
反斜杠 | 92 | 代表一个反斜杠字符 |
\' |
单引号 | 39 | 代表一个单引号字符 |
\" |
双引号 | 34 | 代表一个双引号字符(在字符常量中不常用,但在字符串中常用) |
\b |
退格 | 8 | 光标回退一格 |
\f |
换页 | 12 | 换到下一页 |
\v |
垂直制表 | 11 | 垂直方向跳格 |
示例:
'\n' // 代表换行符 '\t' // 代表制表符 '\\' // 代表反斜杠字符 \ '\'' // 代表单引号字符 ',这在要存储单引号本身时非常有用
八进制转义序列
可以使用字符的八进制 ASCII 码来表示该字符。
格式: '\ooo' (o 是 0-7 的数字)
示例:
'\101' // 1*8^2 + 0*8^1 + 1*8^0 = 65,代表字符 'A' '\12' // 1*8^1 + 2*8^0 = 10,代表换行符 '\n' (等同于 '\n') '\0' // 0*8^1 + 0*8^0 = 0,代表空字符,非常重要!是字符串的结束标志。 '\141' // 1*8^2 + 4*8^1 + 1*8^0 = 97,代表字符 'a'
十六进制转义序列
可以使用字符的十六进制 ASCII 码来表示该字符。
格式: '\xhh' (h 是 0-9, a-f, A-F 的数字)
示例:
'\x41' // 4*16^1 + 1*16^0 = 65,代表字符 'A' '\xA' // 10*16^1 = 160 (注意,A前面可以没有0) '\x0a' // 0*16^1 + 10*16^0 = 10,代表换行符 '\n' (等同于 '\n') '\x61' // 6*16^1 + 1*16^0 = 97,代表字符 'a'
总结与注意事项
| 类型 | 示例 | 合法性 | 描述 |
|---|---|---|---|
| 普通字符 | 'a' |
合法 | 代表字母 'a' |
| 合法 | 代表空格 | ||
'ab' |
非法 | 单引号内只能有一个字符 | |
| 转义字符 | '\n' |
合法 | 代表换行符 |
'\\' |
合法 | 代表反斜杠 \ |
|
'\'' |
合法 | 代表单引号 | |
| 八进制 | '\101' |
合法 | 代表 'A' |
'\0' |
合法 | 代表空字符,ASCII值为0 | |
| 十六进制 | '\x41' |
合法 | 代表 'A' |
'\x0A' |
合法 | 代表换行符 | |
| 非法情况 | "a" |
非法 | 双引号代表字符串,不是字符常数 |
| 非法 | 单引号内不能为空 | ||
'\088' |
非法 | 八进制序列中不能包含数字8或9 |
代码示例
下面的代码展示了字符型常量的本质——它们就是整数。
#include <stdio.h>
int main() {
// 定义几个字符型常数
char ch1 = 'A';
char ch2 = '\n';
char ch3 = '\x41'; // 和 'A' 等价
char ch4 = 65; // 直接使用ASCII码赋值,和 'A' 等价
// 1. 字符型常数可以以字符形式输出
printf("ch1 (as char): %c\n", ch1); // 输出: A
// 2. 字符型常数可以以整数形式输出(输出其ASCII码值)
printf("ch1 (as int): %d\n", ch1); // 输出: 65
printf("ch2 (as int): %d\n", ch2); // 输出: 10 (换行符的ASCII码)
printf("ch3 (as int): %d\n", ch3); // 输出: 65
// 3. 可以直接进行算术运算
char ch5 = 'B';
printf("'B' - 'A' = %d\n", ch5 - ch1); // 输出: 1 (因为 'B'的ASCII码是66, 'A'是65)
// 4. '\0' 的使用
char ch6 = '\0';
printf("The value of '\\0' is: %d\n", ch6); // 输出: 0
return 0;
}
希望这个详细的解释能帮助你完全理解 C 语言中的字符型常数!
