转义字符:C中定义了一些字母前加"\"来表示常见的那些不能显示的ASCII字符,如\0,\t,\n等,就称为转义字符。
最近有看到一张转义字符表,但除了常用的几个,我对转义字符的效果并不了解,甚至对一些转义字符的功能还有所混淆,对表中的解释也是一知半解。所以接下来对表中的转义字符一一尝试:
\a 鸣铃 ASCII码值:7
示例代码:
#include <stdio.h>
int main(void)
{
printf("\a");
return 0;
}
结果:
啥也没发生,并没有听到什么声音;据说是需要蜂鸣器,且现在的电脑主板大多是不带蜂鸣器了,所以没有效果。
更多有关 "\a" 的理解可以参考 这里
\b 退格 ASCII码值:8
示例代码:
#include <stdio.h>
int main(void)
{
printf("鸡\b你太美");
printf("c\btrl");
printf("\n");
return 0;
}
结果:
\b可以将当前位置退回一格,如图,有了这个转义字符我们就可以把“鸡你太美”的“鸡”消掉,把“ctrl”的“c”消掉,这样小黑子就黑不到我家哥哥了,但是这里要注意的是,退回一格指的是退回一个字符(但好像对转义字符无效),比如此处汉字占两个字节,字母占一个字节,所以“你”前面还有一个字符的空位,而t前面没有。
\f 换页符 ASCII码值:12
实例代码:
#include <stdio.h>
int main(void)
{
printf("鸡你太美\f");
printf("鸡你太美\f");
printf("鸡你太美");
return 0;
}
结果:
通过编译器的结果可以猜测是跳到下一行的当前位置继续输出,并不是我们看到的“下一页的开头”。
\n 换行符 ASCII码值:10
这个应该不用展示了吧,这个是最常用的,效果是换到下一行的行首。
\r 回车符 ASCII码值:13
实例代码:
#include <stdio.h>
int main(void)
{
printf("鸡你\r太美");
printf("\n"); //用于换行
printf("1998年8月2日,\r蔡徐");
printf("\n");
return 0;
}
结果:
由图,因为 \r 的作用(光标移到当前行首),之后输出的内容把前面的内容覆盖掉了,并不是将前面的内容推移向后;同样的,一个汉字字符覆盖两个英文(数字)字符。
\t 水平制表 ASCII码值:9
实例代码:
#include <stdio.h>
int main(void)
{
printf("鸡你太\t美");
printf("\n"); //用于换行
printf("蔡徐\t坤出生于浙江温州。");
printf("\n");
return 0;
}
结果:
\t的效果就像TAB键,进入下一个制表位,如左图,虽然插入\t的位置不同,但打印的时候其后的内容却从同一位置开始,适用于有打印格式的场景,如右图即是作者打印的九九乘法表。
\v 垂直制表 ASCII码值:11
示例代码:
#include <stdio.h>
int main(void)
{
printf("鸡你太\v美");
printf("\n"); //用于换行
printf("蔡徐\v坤出生于浙江温州。");
printf("\n");
return 0;
}
结果:
感觉和\f效果很像有没有,都是光标转移到下一行的当前位置。 没有找到什么清晰的解释,据说是在文件打印有特殊的效果(惭愧惭愧)
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
错误示范:
这类字符有自己特殊的作用,如果想要打印出来,而你直接在字符串中使用,将会产生大量的报错,这是需要用到反斜杠“\”来提示计算机,后面的字符不是用在特殊作用上,而是想打印出来。
正确操作方法:
#include <stdio.h>
int main(void)
{
printf("\'鸡你太美\'");
printf("\n"); //用于换行
printf("\"鸡你太美\"");
printf("\n");
printf("\\鸡你太美\\");
printf("\n");
return 0;
}
结果:
想要的结果出现了!!!
\? 问号
关于这个转义字符我确实有个问号,因为问号不论带不带“\”,都可以正常输出“?”。对于这个问题,我找到一个大佬的博文,可以点击这里阅读,但我个人境界没到暂时不太理解(惭愧惭愧)
\0 空字符 ASCII码值:0
'\0' 是字符串的结束的标志符,任何字符串之后都会自动加上'\0'。如果字符串末尾少了‘\0’字符,则其在输出时可能会出现乱码问题。‘\0’转义字符在ASCII表中并不表示阿拉伯数字0,阿拉伯数字0的ASCII码为48。
因为空字符串也是字符串,所以空字符串中也带有且仅有一个'\0',所以也叫它空字符。
\ddd \xhh
分别用八进制和十六进制输出字符,d -> 0~7 h -> 0~9a~f
ASCII码表(部分):
示例代码:
#include <stdio.h>
int main(void)
{
printf("\114");
printf("\x4c");
printf("\n"); //用于换行
}
查表,八进制0114,和十六进制0x4c代表的都是 "L" 字母。
输出结果正确!
以上是我对转义字符的总结及一些个人理解,如有错漏,实属水平不够,欢迎指正和讨论!感激不尽!