目录
3.\?:在书写连续多个问号时使用,防止他们被解析成三字母词
在介绍本节内容之前,先补充一点知识
- 打印整型:%d
- 打印字符:%c
- 打印字符串:%s
- 打印float类型的数据:%f
- 打印double类型的数据:%lf
- 打印sizeof的返回值:%zu
一、字符串
在C语言中,char表示字符类型,用单引号引起来,如:'a','w'
而用双引号引起来的一串字符称为字符串字面值,简称字符串,如:"hello","123"
int main()
{
//字符类型 char
'a';
char ch = 'b';
//字符串:在C语言中没有字符串类型
"hello";
return 0;
}
注:在C语言中没有专门的字符串类型,字符串的结束标志是一个\0的转义字符,在计算字符串长度的时候\0是结束标志,不算做字符串内容
下面列了两个数组示例(如果不知道数组是什么,没关系我们后面会慢慢介绍到的),为什么输出的结果会不同呢?这就是\0的重要性,在我们定义数组时,计算机会随机开辟一片空间,而这片内存后面是否存入东西我们不知道,由于字符串自带结束标志,所以在运行时遇到\0就停止了,但是arr2中没有结束标志,因此会继续运行后面的东西直到遇到\0才会停止
如果我们加上\0那么结果就相同了
计算字符串长度的函数:strlen()
就是string length,它是一个库函数,因此需要添加头文件<string.h>才能调用
//计算字符串长度:strlen()
int len = strlen("abc");
printf("%d\n", len);//3
二、转义字符
顾名思义,转义字符就是转变意思
常用的转义字符有以下几种
- \n:换行
- \a:警告字符
- \b:退格符
- \f:进纸符
- \r:回车
- \t:水平制表符
- \v:垂直制表符
- \ddd:ddd代表1~3个八进制的数字
- \xdd:dd表示2个十六进制数字
- \?:在书写连续多个问号时使用,防止他们被解析成三字母词
- \':用于表示字符常量'
- \":用于表示一个字符串内部的双引号
- \\:用于表示一个反斜杠,防止它被解释成一个转义序列符
接下来笔者挑几个常用的给大家举例
1.\n:换行
在hello和world中间添加了\n则可换行
2.\t:水平制表符
在hello和world中间添加了\t则可达到制表符的效果,如Tab键,达到的效果占4个字符,但若计算字符串长度时,转义字符\t只算一个
3.\?:在书写连续多个问号时使用,防止他们被解析成三字母词
首先补充一下三字母词,在以前的C语言版本中,若输出??)会被当做],??(会被当做[
为了让?发挥本来就是?的作用,就有了转义字符\?,但是现在的版本不会出现这种情况了,因此用的也较少。
4.\\:用于表示一个反斜杠,防止它被解释成一个转义序列符
可以从上图看出,本来是打印路径G:\code\C\study\test_1_6,将\t当成了水平制表符,输出结果与想象中有偏差,而要避免上述情况打印\,就要使用转义字符\\,示例如下
5.\':用于表示字符常量'
若要打印单引号',则要加转义字符,否则就会报错,因为系统会自动将前两个单引号匹配起来,判定第三个单引号是落单的,则提示错误
在第二个单引号前加上\,则可打印'
6.\":用于表示一个字符串内部的双引号
双引号跟单引号一样,系统会判定第三个双引号未匹配提出报错
在第二个双引号前加上\则可打印"
7.\ddd:ddd代表1~3个八进制的数字
在举例之前要补充一点有关ASCII码的小知识
在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示
ASCII 码使用指定的7 位或8 位二进制数组合来表示128 或256 种可能的字符。标准ASCII 码也叫基础ASCII码,使用7 位二进制数(剩下的1位二进制为0)来表示所有的大写和小写字母,数字0 到9、标点符号,以及在美式英语中使用的特殊控制字符
而131八进制转换为十进制数为89,对应ASCII码可查找到Y
8.\xdd:dd表示2个十六进制数字
将十六进制61转化为十进制得97,对照ASCII码表可查找到a
三、注释
- C语言的注释风格(多行注释)/* */(但若嵌套注释会有问题)
/*
//\n:换行
printf("%s\n", "hello\nworld");
//\t:水平制表符
printf("hello\tworld");
//\?:\在书写连续多个问号时使用,防止他们被解析成三字母词
printf("How are you??");
//\\:用于表示一个反斜杠,防止它被解释成一个转义序列符
printf("G:\\code\\C\\study\\test_1_6");
//\':用于表示字符常量'
printf("%c\n",'\'');
//\":用于表示一个字符串内部的双引号
printf("%s\n","\"");
//\ddd:ddd代表1~3个八进制的数字
printf("%c\n", '\131');
//\xdd:dd表示2个十六进制数字
printf("%c\n", '\x61');
*/
- C++注释风格(单行注释)//(笔者常用的也是此方法)
//转义字符
int main()
{
//\n:换行
printf("%s\n", "hello\nworld");
//\t:水平制表符
printf("hello\tworld");
//\?:\在书写连续多个问号时使用,防止他们被解析成三字母词
printf("How are you??");
//\\:用于表示一个反斜杠,防止它被解释成一个转义序列符
printf("G:\\code\\C\\study\\test_1_6");
//\':用于表示字符常量'
printf("%c\n",'\'');
//\":用于表示一个字符串内部的双引号
printf("%s\n","\"");
//\ddd:ddd代表1~3个八进制的数字
printf("%c\n", '\131');
//\xdd:dd表示2个十六进制数字
printf("%c\n", '\x61');
return 0;
}
注:主是在我们学习和工作中写代码都是很重要的存在,所以我们一定要养成写注释的好习惯
- 注释可以帮助我们理清思路
- 注释可以帮助我们对复杂代码进行解释
- 注释可以帮助我们和他人阅读理解代码,提高可读性