📄 一句话概括
字符常量=单引号包起来的"一个"字符,比如 'A'、'7'、'\n'。它有两副面孔:你看到的是字母,计算机存的是数字——'A' 在内存里就是 65(ASCII 码),只占 1 个字节。打不出来的字符用转义字符表示,反斜杠开头:'\n'(换行)、'\t'(制表符)、'\\'(反斜杠本身)。记住一句话:字符常量本质是整数,所以它能参与加减运算('A' + 1 得 'B')。
一、写法规矩
'A' // 字母
'7' // 数字字符 —— 注意它不是数字 7,是"字符 7"
' ' // 一个空格(也算字符,别漏了)
'\n' // 转义字符:换行
'a' // 小写 a 和大写 A 是两个不同的字符
| 规矩 | 说明 |
|---|---|
| 单引号,不是双引号 | 'A' 是字符;"A" 是字符串(不一样) |
| 单引号里只能放一个字符 | 'ab' 会报错;'\n' 算一个字符(转义序列) |
| 必须是英文半角引号 | 中文引号 ' 编译器直接不认 |
二、两副面孔:字形 ↔ ASCII 码
计算机里没有"字母",只有数字。每个字符都对应一个编号,这套编号叫 ASCII 码:
| 字符 | ASCII 码 | 记忆点 |
|---|---|---|
'0' |
48 | 数字字符从 48 开始 |
'A' |
65 | 大写字母从 65 开始 |
'a' |
97 | 小写字母从 97 开始(比大写大 32) |
' '(空格) |
32 | 最小的"可打印字符" |
'\0' |
0 | 空字符,用作字符串的结束标志(2.2.4) |
由此推出两条实用规律:
- 大写变小写:加 32(
'A' + 32 = 'a') - 字符转数字:
'7' - '0'=7(把字符'7'变成数值 7,这个技巧在输入处理里很常用)
三、转义字符:打不出来的字符怎么表示
换行、制表、引号本身……这些没法直接打出来,就用反斜杠 \ + 一个符号表示:
| 转义写法 | 含义 | 用处 |
|---|---|---|
'\n' |
换行 | 最常用,相当于 endl(但不刷新缓冲) |
'\t' |
制表符(Tab) | 输出对齐 |
'\\' |
反斜杠本身 | 表示"我要的是 \ 这个字符" |
'\'' |
单引号本身 | 单引号有特殊含义,得转义 |
'\"' |
双引号本身 | 写在字符串里要转义 |
'\0' |
空字符(ASCII 0) | 字符串的结束标记 |
'\r' |
回车 | 老式打印机的"回到行首" |
'\a' |
响铃 | 会让电脑"叮"一声(吓人用) |
难点只有一个:'\''——表示单引号字符。因为单引号本身是定界符,里面要写单引号就必须转义。写法就是 '\'':引号、反斜杠、引号、引号。
四、动手 Demo:把"两副面孔"打出来
新建 charconst.cpp:
#include <iostream>
using namespace std;
int main() {
cout << 'A' << " 的 ASCII 码是 " << (int)'A' << endl;
cout << 'a' << " 的 ASCII 码是 " << (int)'a' << endl;
cout << "大写 A + 32 = " << (char)('A' + 32) << endl;
cout << "字符 '7' 减 '0' = " << '7' - '0' << endl;
return 0;
}
看到什么算成功:
A 的 ASCII 码是 65
a 的 ASCII 码是 97
大写 A + 32 = a
字符 '7' 减 '0' = 7
两条重要观察:
(int)'A'打印出 65——同一个'A',告诉cout按整数看,就是 65。(int)是"强制类型转换"(第 3 章细讲)- 最后一行结果是 7(一个数字),不是字符
'7'——字符相减得到整数
30 秒实验:写 cout << 'A' + 1 << endl; 看结果是 66(不是字母 B)——因为 'A' + 1 是整数运算。想得到字母 B,得写 cout << (char)('A' + 1)。这一对对偶,正是"字符 vs 数字"的分界。
五、常见误区
- "
'A'就是字母 A"——在代码里是,在内存里是数字 65。理解这一点,'A' + 1的结果就不再神秘 - "
'A'和"A"差不多"——差得多:'A'占 1 字节,"A"占 2 字节(多一个隐藏的结束符'\0')。用错引号是最常见的低级错误 - "
'7'就是数字 7,能直接算"——'7'是字符(值 55)。要参与数值运算,得先转:'7' - '0'才等于 7 - "中文也是字符,能放进单引号"——单个汉字在 UTF-8 里占 3 字节,塞不进一个
char。'中'在多数编译器里会报错或警告。中文要用字符串"中"
自测四问(点开对答案)
1. `'A'` 在内存里是什么?占几字节?——整数 **65**(ASCII 码),占 **1 字节**。 2. `'A'` 和 `"A"` 有什么区别?——单引号是**字符常量**(1 字节);双引号是**字符串常量**(`A` + 结束符 `'\0'` = 2 字节)。 3. 写"单引号字符本身"该怎么写?——`'\''`(反斜杠转义)。 4. `'A' + 1` 的结果是什么?想输出字母 B 怎么办?——结果是整数 **66**;想输出字母 B 要写 `(char)('A' + 1)`。- ☑ 字符串常量