给出结论,在常见的C语言标准(如C89/C90, C99, C11)中,下列是合法的字符常量:

(图片来源网络,侵删)
'A''9''\n'(换行符)'\\'(反斜杠字符本身)'\''(单引号字符本身)'\0'(空字符,ASCII码为0)
字符常量的核心规则
一个合法的字符常量必须满足以下规则:
- 必须由一对单引号()包围,这是最基本的语法要求。
- 单引号内部可以包含:
- 一个普通字符:如
'A','b', , 。 - 一个转义字符序列:以反斜杠
\开头,代表一个特殊的控制字符或一个不可见的字符。 - 一个数字形式的字符码:虽然不常用,但也是合法的,如
'\101'。
- 一个普通字符:如
各类合法字符常量详解
普通字符
这是最简单的形式,单引号内是一个可以显示的ASCII字符。
'A':代表大写字母 'A'。'z':代表小写字母 'z'。'1':代表数字字符 '1',注意它与整数1不同。- 代表符号 '@'。
转义字符
当单引号内需要包含一些特殊字符(如单引号本身、反斜杠)或者无法直接输入的控制字符(如换行、回车)时,就需要使用转义字符。
| 转义序列 | 名称 | 含义 | ASCII码 |
|---|---|---|---|
\n |
换行 | 将光标移到下一行开头 | 10 |
\t |
水平制表 | 将光标移到下一个制表位 | 9 |
\r |
回车 | 将光标移到当前行开头 | 13 |
\\ |
反斜杠 | 代表一个反斜杠字符 \ |
92 |
\' |
单引号 | 代表一个单引号字符 | 39 |
\" |
双引号 | 代表一个双引号字符 (在字符串中常用) | 34 |
\0 |
空字符 | 字符串的结束标志 | 0 |
\a |
响铃 | 使终端发出警报声 | 7 |
\b |
退格 | 将光标回退一格 | 8 |
\f |
换页 | 换到下一页 | 12 |
\v |
垂直制表 | 垂直方向跳格 | 11 |
数字形式的字符码(八进制和十六进制)
这是转义字符的一种高级形式,允许你直接通过字符的ASCII码来指定它。

(图片来源网络,侵删)
-
八进制形式:反斜杠后面跟1到3位八进制数字。
'\0':八进制0,代表空字符。'\101':八进制101(164 + 08 + 1*1 = 65),代表字符'A'。'\12':八进制12(18 + 21 = 10),代表换行符\n。
-
十六进制形式:反斜杠
x后面跟1到多位十六进制数字。'\x41':十六进制41(416 + 11 = 65),代表字符'A'。'\x0A':十六进制0A(10),代表换行符\n。
常见的非法字符常量
理解了合法的,我们来看看哪些是非法的,这能帮助你更好地掌握规则。
-
缺少单引号
(图片来源网络,侵删)A:这是一个标识符(变量名),不是字符常量。
-
使用双引号
"A":这是一个字符串字面量,它包含两个字符:'A'和字符串结束符'\0',在C语言中,char类型的变量不能存储一个字符串。
-
单引号内为空
这是非法的,编译器会报错,因为一个字符常量必须代表一个字符。
-
单引号内包含多个普通字符
'AB':这是非法的,它看起来像一个字符串,但被单引号包围,C标准不允许这样做,编译器通常会发出警告或错误,如果你需要处理多个字符,应该使用字符串或字符数组。
-
无效的转义序列
'\c':c不是一个标准的转义字符,在编译时,编译器可能会将其视为'c'本身,并给出一个警告,因为这不是一个预期的转义序列。
| 类型 | 示例 | 说明 |
|---|---|---|
| 普通字符 | 'a', '1', |
最常见的字符常量形式 |
| 转义字符 | '\n', '\t', '\\', '\'' |
用于表示特殊或不可见字符 |
| 数字形式 | '\101' (八进制), '\x41' (十六进制) |
通过ASCII码指定字符 |
判断一个字符常量是否合法,核心就是看它是否被单引号正确包围,并且内部的内容符合C语言规范(单个普通字符或一个有效的转义序列)。
