
2.1.6 字符型数据
1.字符常量
C语言中字符常量也称为字符型常量,是用单引号包含起来的一个字符,如'a'、'$'等。在实际编码中会发现,单引号中确实可以放入两个甚至更多字符而系统并不提示错误,如'ab',但是这样做往往无法得到想要的结果,所以,除下面即将讲解的转义字符(特殊字符)外,严格遵循单引号里只放一个字符的规定,以免增加不必要的麻烦。
2.转义字符
转义字符又叫特殊字符,是以“\”开头的字符序列。例如,前面在printf中遇到过的\'n'就是一个特殊字符,只不过该字符是夹杂在一堆其他字符中而已。
C语言中转义字符有很多,表2.3列出了部分转义字符。
表2.3 部分转义字符


图2.16 上述printf语句的执行结果
所谓转义字符,就是将反斜杠后面的字符转变成另外一种含义。例如,'\n'表示换行符。推荐重点关注表2.3中的“\n”“\\”“\'”“\"”这四个转义字符,其他转义字符随着练习的增多,遇到后慢慢就会熟悉,不必死记硬背。下面这行代码显示的结果如图2.16所示。输出的结果中包含了一个换行符(导致输出换行)、一个单引号和一个双引号。

3.字符变量
字符变量也称为字符型变量,用来存放字符常量,但需要注意,只能存一个字符,而不是一个字符串,因为一个字符型变量在内存中只占1字节。演示范例如下:

将一个字符常量放到一个字符变量中,实际上并不是把字符本身放到字符变量所属的内存中,而是把字符对应的ASCII码(一个数字)存放到内存中,如表2.4所示。该表只提供部分可显示字符所对应的ASCII码,虽不全面但具备参考价值,如果希望看到比较详细完整的ASCII码表,可以利用搜索引擎获得。
表2.4 部分可显示字符对应的ASCII码表

什么是ASCII码?通俗地说,就是范围处于0~127之间的一个整数(数字)。例如,观察表2.4所示的ASCII码表可以看到,字符a对应的数字是97,b对应的数字是98。
既然在内存中,字符数据是以ASCII码存储,说明字符型数据的存储形式和整数的存储形式类似。所以,在C语言中,字符型数据和整型数据之间可以互通使用,一个字符数据既可以以字符形式输出,又可以以整数形式输出,以字符形式输出时,计算机会先将内存中的ASCII码转换成相应的字符,然后输出。参见如下范例:

这里再一次使用了printf,只是这次的格式符使用的是%c(%c专门用来显示一个数字也就是ASCII码对应的字符)。
可以继续尝试下面这行代码:

再次输出c2的结果看看是什么:
