一、解释转义字符
通俗点来说,转义字符就是在字符前面加一个\从而改变该字符本来的意思。
例如,若需要打印出来abcndef,将会写出一组代码printf("abcndef")。但是如果写出来的代码是printf("abc\ndef"),则\n就组成了一组转义字符,改变了原本n的意思,使\n变成了具有换行意思的转义字符,则打印出来的结果为
abc
def
二、C语言中规定的常见转义字符
1.\?(在书写连续多个问号时使用,防止它们被解析成三字母词)
在早期C语言当中,??)将会被解析成],??(将会被解析成[。即若想打印(hello??),输入printf("%s\n", "(hello??)"),则会打印出来(hello]。这就是三字母词。
如何解决呢?在两个问号前面加上一个\,使问号就变成单纯的问号,不受三字母词的影响,即输入printf("%s\n", "(hello\?\?)"),打印结果即为(hello??)。
2.\'(用于表示字符常量')
若想打印',输入printf("%c\n", '''),则会报错,前面两个''自动配对并且里面没有字符内容。所以要转变'的意思,应输入printf("%c\n", '\''),将'变成单纯的'并固定,就可以打印出'
3.\"(用于表示字符常量")
同理,若想打印",输入printf("%c\n", """),则会报错,前面两个''"自动配对并且里面没有字符内容。所以要转变"的意思,应输入printf("%c\n", "\''"),将'变成单纯的"并固定,就可以打印出"。
4.\\(用于表示一个反斜杠,防止它被解析成一个转义字符)
例如,printf("abcd\0ef")会打印出abcd,因为\0被解析成了一个具有字符串结束标志的转义字符,改变了0原本的意思。若要完整打印abcd\0ef,应输入printf("abcd\\0ef"),使\单纯的是\。
5.\a(alarm,警告字符,使电脑发生蜂鸣)
若输入pirntf("\a"),则打印出空白并引发电脑蜂鸣。
6.\b(退格符,光标回避字符但不删掉字符)
例如输入printf("abc\bdef"),则打印出abdef。计算机解析到c后解析到\b,光标往后退到c,继续解析的def则在c的位置基础上被解析。
7.\f(进纸符,换页符)
8.\n(换行符,前面举例已有介绍)
9.\r(回车,光标转到同一行的开头,而换行是光标转到下一行的开头)
10.\t(水平制表符)
相当于按住一个table键的效果,即空一大格,这一大格的宽度是4或者8的倍数的字节宽度,在vs2022的环境下,一个\t为8个字符,是指\t刚好对齐第八个字符上。
11.\v(垂直制表符)
12.\ddd(字符的八进制表示形式)
ddd表示1到3个八进制数,例如输入printf("%c\n","\130"),则会打印出X。
如何解释?首先将该八进制数转换为十进制,即1✖8²+3✖8+0×1=88,然后在ASCII表上找到对应所表示的字符X,即\ddd的意思就是把八进制的ddd转换为十进制过后,以这个数字作为ASCII码值,以字符形式打印出来的结果就是这个ASCII码值所对应的字符。
13.\xdd(字符的十六进制表示形式)
同理\ddd。但前提是不要超过ASCII值的范围。
注意事项
1.""里面输入的可以是字符,也可以是字符串,但''里面只能输入字符
2.printf("abc")=printf("%s\n", "abc"),但是这种形式只能适用于字符串,整型不可以。
3.小总结打印类型(想要用计算机最终打印出来的类型):%d打印整型类型,%c打印字符类型,%s打印字符或者字符串类型,%f打印float类型的数据,%lf打印double类型的数据,%zu打印sizeof的返回值。
4.abcdef@#等如何以二进制的形式进行存储?给他们进行编号,a为97,b为98等,这就为ACSII编码。特殊记忆,a为97,A为65,差32,b为98,B为66,差32,0为48,其他依次增加。
5.转义字符也是字符,而且是一个字符,\t是一个字符,但是效果为几个字符的长度,并且注意\ddd类型为八进制,只会有01234567出现,不会有8,\xdd类型为十六进制,只会有0123456789ABCDEF出现,不会有G。
6.printf("%d\n",strlen("c:\test\638\test.c"))打印结果为14。
欢迎各位补充与指正。