🔷 第二章 C++语言基础
📄 一句话概括

字符常量=单引号包起来的"一个"字符,比如 '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)

由此推出两条实用规律:

三、转义字符:打不出来的字符怎么表示

换行、制表、引号本身……这些没法直接打出来,就用反斜杠 \ + 一个符号表示:

转义写法 含义 用处
'\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

两条重要观察:

  1. (int)'A' 打印出 65——同一个 'A',告诉 cout 按整数看,就是 65。(int) 是"强制类型转换"(第 3 章细讲)
  2. 最后一行结果是 7(一个数字),不是字符 '7'——字符相减得到整数

30 秒实验:写 cout << 'A' + 1 << endl; 看结果是 66(不是字母 B)——因为 'A' + 1 是整数运算。想得到字母 B,得写 cout << (char)('A' + 1)。这一对对偶,正是"字符 vs 数字"的分界。

五、常见误区

  1. "'A' 就是字母 A"——在代码里是,在内存里是数字 65。理解这一点,'A' + 1 的结果就不再神秘
  2. "'A' 和 "A" 差不多"——差得多:'A' 占 1 字节,"A" 占 2 字节(多一个隐藏的结束符 '\0')。用错引号是最常见的低级错误
  3. "'7' 就是数字 7,能直接算"——'7' 是字符(值 55)。要参与数值运算,得先转:'7' - '0' 才等于 7
  4. "中文也是字符,能放进单引号"——单个汉字在 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)`。

相关笔记