一.字符串
什么是字符串呢?
“hello world!”——这就是一个字符串。
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符串。
那现在有一个问题,这个字符串里有几个字符呢?
是只有’h’, ‘e’, ‘l’, ‘l’, ‘o’,’ ’ ', ‘w’ , ‘o’, ‘r’, ‘d’, ‘!’. 这12字符吗?
不是的!!!
为什么呢?因为在C语言中,字符串的末尾都有一个 '\0’这样的转义字符作为它的结束标志。在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。
来看一段代码:
————————————————
版权声明:本文为CSDN博主「YIN_^O^」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_70980326/article/details/125904625
#include <stdio.h> //下面代码,打印结果是什么?为什么?(突出'\0'的重要性) int main() { char arr1[] = "hello"; char arr2[] = { 'h','e','l','l','o'}; char arr3[] = { 'h','e','l','l','o','\0'}; printf("%s\n", arr1); printf("%s\n", arr2); printf("%s\n", arr3); return 0; }
看运行结果:这就很好地证明了’\0’是字符串的结束标志,隐藏在字符串结尾,%s打印字符串遇到’\0’结束。
二.转义字符
上面我们提到了字符串的结束标志“\0’是一个转义字符,那么什么是转义字符呢?
定义:转义字符是很多程序语言、数据格式和通信协议的形式文法的一部分。对于一个给定的字母表,一个转义字符的目的是开始一个字符序列,使得转义字符开头的该字符序列具有不同于该字符序列单独出现时的语义。因此转义字符开头的字符序列被叫做转义序列。
举个例子:假设我们要在屏幕上打印一个目录: c:\code\test.c
我们写了这样一个代码:
#include <stdio.h> int main() { printf("c:\code\test.c\n"); return 0; }
为什么打印出来是这样呢?\n, \t这些东西为什么没有打印出来呢?
原因是这里的\n, \t就是我们所说的转义字符。
所有的转义字符和所对应的意义:注意:
区分,斜杠:“/” 与 反斜杠:“” ,此处不可互换
\xhh 十六进制转义不限制字符个数 ‘\x000000000000F’ == ‘\xF’
下面做一些练习,帮助大家理解一些常见的转义字符:
问题1:在屏幕上打印一个单引号’,怎么做?
问题2:在屏幕上打印一个字符串,字符串的内容是一个双引号“,怎么做?
printf("%c\n", '''); printf("%s\n", """);
这样能直接打印出来吗?
我们运行一下:发生错误了,为什么呢?
因为,当我们这样 printf(“%c\n”, ’ ’ '); 去打印字符 ’ 时,第一个单引号和第二个单引号结合了,这样第三个单引号就落单了,所以出现错误了。
同样的道理,printf(“%s\n”, " " ");打印一个双引号,前两个也自动结合了。
为了解决这种问题,我们就用到了转义字符,顾名思义,转义字符就是转变了原来的意思。
所以,我们在它们前面都加上一个反斜杠’',*‘用于表示字符常量’,"用于表示一个字符串内部的双引号*,这样,就可以成功打印了。
int main() { printf("%c\n", '\''); printf("%s\n", "\""); return 0; }
再讲两个比较重要的:
- \ddd ,ddd表示1~3个八进制的数字。 如: \130 X
- \xdd ,dd表示2个十六进制数字。 如: \x30 0
举个例子:
int main() { printf("%c\n", '\130'); printf("%c\n", '\x30'); return 0; }
结果应该是什么呢?
三.注释
注释是用来干啥滴?
代码中有不需要的代码可以直接删除,也可以注释掉
代码中有些代码比较难懂,可以加一下注释文字
怎样注释:
注释有两种风格:
1.C语言风格的注释 / xxxxxx /
缺陷:不能嵌套注释
2.C++风格的注释 //xxxxxxxx
可以注释一行也可以注释多行
举个例子:
#include <stdio.h> int Add(int x, int y) { return x+y; } /*C语言风格注释 int Sub(int x, int y) { return x-y; } */ int main() { //C++注释风格 //int a = 10; //调用Add函数,完成加法 printf("%d\n", Add(1, 2)); return 0; }
被注释掉的代码,要么是不需要的带码,要么是对代码的解释,它们是不会参与程序的运行的。
最后,我们再来做一道相关的笔试题:
#include <stdio.h> int main() { printf("%d\n", strlen("abcdef")); // \62被解析成一个转义字符 printf("%d\n", strlen("c:\test\628\test.c")); return 0; }
问题是:程序输出什么?
结果是6,14.
首先给大家解释一下strlen()是什么东西。
strlen是C语言内置的一个求字符串长度的库函数,另外再提一下在计算字符串长度的时候 \0 是结束标志,不算作字符串内容。