![C++新经典](https://wfqqreader-1252317822.image.myqcloud.com/cover/184/44510184/b_44510184.jpg)
2.1.6 字符型数据
1.字符常量
C语言中字符常量也称为字符型常量,是用单引号包含起来的一个字符,如'a'、'$'等。在实际编码中会发现,单引号中确实可以放入两个甚至更多字符而系统并不提示错误,如'ab',但是这样做往往无法得到想要的结果,所以,除下面即将讲解的转义字符(特殊字符)外,严格遵循单引号里只放一个字符的规定,以免增加不必要的麻烦。
2.转义字符
转义字符又叫特殊字符,是以“\”开头的字符序列。例如,前面在printf中遇到过的\'n'就是一个特殊字符,只不过该字符是夹杂在一堆其他字符中而已。
C语言中转义字符有很多,表2.3列出了部分转义字符。
表2.3 部分转义字符
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-T48_85217.jpg?sign=1739350718-2tFULxqcfYpxydmTHIQAOdgbnlP9f4UT-0-d2ca04d6663c81daad4433a4c28428ab)
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-P48_44041.jpg?sign=1739350718-1ZPL15b14M5CUsJGcpErhZYCQKB8rGeD-0-6fe1af5e69be6b54735c10dead4d3793)
图2.16 上述printf语句的执行结果
所谓转义字符,就是将反斜杠后面的字符转变成另外一种含义。例如,'\n'表示换行符。推荐重点关注表2.3中的“\n”“\\”“\'”“\"”这四个转义字符,其他转义字符随着练习的增多,遇到后慢慢就会熟悉,不必死记硬背。下面这行代码显示的结果如图2.16所示。输出的结果中包含了一个换行符(导致输出换行)、一个单引号和一个双引号。
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p48_85299.jpg?sign=1739350718-ZoAqUrTE3vkIcxkGpG3izBPAlZUsElcS-0-d616b6c65e8264a8c0f453c9da5de6f6)
3.字符变量
字符变量也称为字符型变量,用来存放字符常量,但需要注意,只能存一个字符,而不是一个字符串,因为一个字符型变量在内存中只占1字节。演示范例如下:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p48_85300.jpg?sign=1739350718-j1Tym9TaWvaQ1SXkDWMrOCghp77YE9Xr-0-11d537c491aaa06a1a949672ad561b75)
将一个字符常量放到一个字符变量中,实际上并不是把字符本身放到字符变量所属的内存中,而是把字符对应的ASCII码(一个数字)存放到内存中,如表2.4所示。该表只提供部分可显示字符所对应的ASCII码,虽不全面但具备参考价值,如果希望看到比较详细完整的ASCII码表,可以利用搜索引擎获得。
表2.4 部分可显示字符对应的ASCII码表
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-T49_44058.jpg?sign=1739350718-IgQH9dKJ1MSI20Hceo1811fBE6Fnv93h-0-f7035091de2764c905b550b9ee1593ce)
什么是ASCII码?通俗地说,就是范围处于0~127之间的一个整数(数字)。例如,观察表2.4所示的ASCII码表可以看到,字符a对应的数字是97,b对应的数字是98。
既然在内存中,字符数据是以ASCII码存储,说明字符型数据的存储形式和整数的存储形式类似。所以,在C语言中,字符型数据和整型数据之间可以互通使用,一个字符数据既可以以字符形式输出,又可以以整数形式输出,以字符形式输出时,计算机会先将内存中的ASCII码转换成相应的字符,然后输出。参见如下范例:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p49_85221.jpg?sign=1739350718-CEeo3uxivZhuStDAKGzKARO3zR0vFRrU-0-e66376edcaac41c9646ca81f94304c40)
这里再一次使用了printf,只是这次的格式符使用的是%c(%c专门用来显示一个数字也就是ASCII码对应的字符)。
可以继续尝试下面这行代码:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p49_85222.jpg?sign=1739350718-dJSifs7uaCC9JmSqNmIOmRDRP2ChKRqm-0-62e45960c0b494fdb3f86fa13fa153e3)
再次输出c2的结果看看是什么:
![](https://epubservercos.yuewen.com/F329F6/23721607801994206/epubprivate/OEBPS/Images/Figure-p49_85223.jpg?sign=1739350718-jRo5S35WgrAdiuqX9s9mkmuGcnMouMmm-0-26967a6efb99f68cf81af9ec7fdbe96c)