目录
转义字符:转变原来那个字符的意思。
一、概述
不是什么都能转义的。
这里就不得不提一下转义字符了。
转义字符顾名思义就是转变意思。
下面看一些转义字符:
考题:
二、分类
2.1 n的转义字符
#include <stdio.h>
int main()
{
printf("abc\n");//abc 把原来普通含义n转变一下
printf("abcn");//abcn
return 0;
}
2.2 0的转义字符
打印:
加入我们要在屏幕上打印一个目录: c:\code\test.c
我们该如何写代码?
#include <stdio.h>
int main()
{
printf("c:\code\test.c\n");
return 0;
}
实际上程序运行的结果是这样的:
2.3 \?
现在三字母词已经很少了,现在基本都不支持三字母词了。
早期才有三字母词,例如:VC++6.0版本。
特殊的转义字符:早期的C语言中叫做三字母词 用VC++6.0老的版本才有
??) ]
printf("(Are you OK??)"); //(Are you OK]
printf("(Are you OK\?\?)\n"); //(Are you OK\?\?)
2.4 引号的转义字符
printf("%c\n",'w');
//printf("%c\n",'''); 前两个单引号是一对,最后一个单着,没法解析,报错
printf("%c\n", '\''); //使用转义字符
#include <stdio.h>
int main()
{
//问题1:在屏幕上打印一个单引号',怎么做?
//问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号“,怎么做?
printf("%c\n", '\'');
printf("%s\n", "\"");
return 0;
}
打印字符串有两种形式:
#include <stdio.h>
//库函数的引用,得引用头文件
#include <string.h>
int main()
{
//第一种(简化版):直接打印
printf("abcdef");
//第二种:指定格式进行打印
printf("%s\n","abcdef");
return 0;
}
只有字符串可以这样简化打印,整型是不可以的。
printf("ab\0cn\n");
printf("ab\n\\0cn\n");
printf("abcd\n");
printf("%s\n","abcd");
//printf(120); 报错
2.5 水平制表符
注意:路径打印时,一定是两个\
#include <stdio.h>
int main() {
printf("%s\n","c:\test\test\.c");//c: est est.c
printf("%s\n","c:\\test\\test\.c");//c:\test\test.c
printf("c:\\test\\test.cpp");//路径打印
return 0;
}
2.6 警告字符
printf("\a");//警告:触发电脑的一个蜂鸣
printf("\a\a\a\a\a\a\a\a\a");//多个也警告一个,响一次
printf("%c\n",'\130');//X
2.7 换行字符
#include <stdio.h>
int main() {
printf("%s\n","ab\ncd\nef");//
return 0;
}
2.8 水平制表符
和Tab键一样的功能。
printf("abc\ndef");
printf("%d",strlen("c:\test\041\test.c"));//13
// \t --tab --水平制表符
编译运行快捷键:Ctrl+Fn+F5
2.9 八进制的转义字符
八进制表示:
int main() {
printf("%c\n",'\x60');//`
// 没意义了,超过饿了ASCII的范围
printf("%c\n",'\x0060');//`
return 0;
}
计算机在内存中存储是二进制:
2.10 十六进制的转义字符
打印c:
注意:转义出的字符,范围一定要在ASCII范围内(0~127之间),才是有意义的。
超出该范围,毫无意义。
考题:
#include <stdio.h>
#include <string.h>
int main() {
// \041 -- \ddd --d表示8进制数字
// 041转换为十进制是33
// 33在ASCII中代表的字符是!
printf("%c\n",'\041');
int a = 10;
//sizeof是操作符,不是函数
printf("%d\n",sizeof(int));//4
printf("%d\n",sizeof(a));//4
printf("%d\n", sizeof a);//4
printf("%d\n",100);//100
printf("%c\n", 100);//d 100转换为ASCII值是d
printf("%s\n","abcdef");//abcdef
int b = 10;
printf("%p\n",&b);//009dfd54
printf("%x\n",&b);//9dfd54
printf("%c\n",\x063);//这是一个字符
return 0;
}
三、ASCII码表
四、练习
4.1 笔试题
//程序输出什么?
#include <stdio.h>
int main()
{
printf("%d\n", strlen("abcdef"));//6
// \62被解析成一个转义字符
printf("%d\n", strlen("c:\test\628\test.c"));
return 0;
}
程序输出什么?
#include <stdio.h>
int main()
{
printf("%d\n", strlen("abcdef"));//6
// \62被解析成一个转义字符
printf("%d\n", strlen("c:\test\628\test.c"));//14
return 0;
}
4.2 求字符串的长度
#include <stdio.h>
int main()
{
printf("%d\n", strlen("c:\test\121\0"));//7 \0不算字符串内容
printf("%d\n",strlen("c:\test\121"));//7
return 0;
}
#include <stdio.h>
int main()
{
int a = 0x7b;
int b = 0173;//八进制以0开头
int c = 123;
float arr[] = {3e3,3e-3};
printf("a = %d b = %d c = %d\n",a,b,c);//a = 123 b = 123 c = 123
printf("3e3 = %f 3e-3 = %f\n",arr[0],arr[1]);
//3e3 = 3000.000000 3e-3 = 0.003000
//e代表的是10的幂次 不能随便乱写
return 0;
}