王国探险记系列
文章目录(3)
四,我们还可以通过计算字符串长度来证明字符串后面有一个隐藏的\0
前言
C语言王国探险记,是我们学习C语言,从小白成长为大佬的的探险历程,我们在这章将探险字符串和注释这个知识关卡
一,有字符串类型吗?
c语言中字符类型,但是有字符串类型吗?
char
short
int
long
long long
folat
double
我们在怎么类型里面有没有见到一个叫字符串类型的呢?没有
C语言有字符类型,但是没有字符串类型。
1,那C语言是怎么表示字符串的呢?
"hello world.\n"
这种由双引号(Double Quote)引起来的一串字符称为字符串字面值(String Literal),或者简称字符 串。
注:字符串的结束标志是一个 \0 的转义字符。在计算字符串长度的时候 \0 是结束标志,不算作字符串 内容。
2,证明字符串的结束标志是一个 \0 的转义字符
简单写一个代码让大家跟着我们看一下
我们主函数写出来就什么都不写
我们将在代码加注释和结果运行图中进行知识点的讲解:
//如何证明\0是字符串的结束标志呢 int main() { return 0; } //调试技巧:先按F10,开始调试之后,出现箭头开始调试了 //在菜单栏里点调试,然后是监视窗口的,分为1,2,3,4 //点那个监视窗口都可以 //这里给上一个双引号然后加上abcdef。好像平平无奇 //然后我们点开可以看到abcdefg后面跟了一个\0 //实际上当你看到这个字符串的时候可以看到字符串有个\0吗,看不到 //只有当你真正的去观察会发现,g后面还放了一个\0的字符 //其实在字符串的末尾是隐藏了一个\0的字符的,当你写出这样一个字符串的时候悄悄的隐藏了一个\0 //这个\0叫做字符串的结束标准 //一个字符串当真正往后走,遇到\0的时候,它才认为这个字符串结束了 //\0是字符串的结束标志
注意:
我们的main()函数里面是没有任何的值的,我们的第三张图里面的“abcdef"字符串是我们在监控窗口里面添加的
看图:我们可以看到一套流程后,我们可以看到,在字符串的最后有一个隐藏的\0。
编辑
编辑
编辑
3,证明字符串的结束标志\0 的重要性
我们现在再举一个有打印字符数组来证明\0对字符串有很重要的意义的代码实例:
//字符串是可以存放在字符数组中的 //%s是打印字符串 int main() { char arr1[] = "abc"; //我们这个地方看到的是这样一个现象,隐藏了一个\0 char arr2[] = { 'a' , 'b' , 'c'};//我们说C语言里面两个单引号引起来的是一个字符, //中间是一个逗号 //我们可以看到后面没有\0 //现在开始打印字符串 //pfintf()怎么来打印字符串呢很简单 //一个"%s"就可以打印 printf("%s\n", arr1);//就是把arr1这个里面的字符串数组打印出来,打印完换个行 printf("%s\n", arr2);//就是把arr2这个里面的字符串数组打印出来,打印完换个行 //这就是我们现在的打印两个字符串 //看一下我们的效果 return 0; } //调试调监控,发现确实后面隐藏了\0 //证明了字符串里面放了一个隐藏的\0 //这个\0是字符串的结束标志,她对于字符串来说非常重要
我们通过代码+注释和结果运行图来理解:
编辑
编辑
结果分析:
我们可以看到arr1有\0作为结束标志,arr2数组是没有\0作为结束标志,我们在通过运行结果图可以看到,
arr1打印完abc就停下来了
arr2打印完abc就是烫烫烫烫.....
在里面最大的问题就在于\0,我们前面说了\0是字符串的结束标志
我们还可以通过字符数组在内存中的表示形式来理解\0的重要性:
arr1的内存布局
a b c \0
因为有\0所以就只打印到c就停止了,就证明了\0的重要性
arr2的内存布局
a b c
后面是啥不知道,我只知道我在数组里面放了abc,后面是不是\0不知道所以当%s打印arr2的时候,字符串打印一定是遇到\0停止,当c打印完之后要不要打印呢,取决于后面有没有\0,我们这个结果可见没有遇到\0,直达在某一个一个地方遇到\0了,恰好又是他随机碰上的一个\0才停止打印。这就证明了\0的重要性
3.1我们在arr2的字符串数组后面加一个\0然后看结果
我们通过代码+注释和结果运行图来理解:
int main() { char arr1[] = "abc"; //我们这个地方看到的是这样一个现象,隐藏了一个\0 char arr2[] = { 'a' , 'b' , 'c' ,'\0'}; //如果这里主动放一个\0呢,我们打印看一下 // 这个时候就是两个abc了 //我们说C语言里面两个单引号引起来的是一个字符,中间是一个逗号 //我们可以看到后面没有\0 //现在开始打印字符串 //pfintf()怎么来打印字符串呢很简单 //一个"%s"就可以打印 printf("%s\n", arr1);//就是把arr1这个里面的字符串数组打印出来,打印完换个行 printf("%s\n", arr2);//就是把arr2这个里面的字符串数组打印出来,打印完换个行 //这就是我们现在的打印两个字符串 //看一下我们的效果 return 0; }
编辑
我们可以看到运行结果图,在arr2后加一个\0就可以被编译器正常的识别结束
再一次证明了\0的重要性
四,我们还可以通过计算字符串长度来证明字符串后面有一个隐藏的\0
提前知道:
我们计算字符串长度用到一个函数叫strlen()
str就是字符串的意思,len就是计算的意思
strlen()是一个库函数 -- 求字符串长度的,统计的是字符串中\0之前的字符个数
#include <string.h>//是strlen()这个函数所需要的头文件,string就是字符串的意思,
注意你使用字符串系列的的函数都需要引用这个头文件我们通过代码+注释和结果运行图来理解:
//我们计算字符串长度用到一个函数叫strlen() //str就是字符串的意思,len就是计算的意思 //strlen()是一个库函数 -- 求字符串长度的,统计的是字符串中\0之前的字符个数 //#include <string.h>//是strlen()这个函数所需要的头文件,string就是字符串的意思, //注意你使用字符串系列的的函数都需要引用这个头文件 int main() { char arr1[] = "abc";//我们统计arr1的时候我们统计到c就停止了, //因为遇到了\0,所以统计出来是3 char arr2[] = { 'a','b','c' }; printf("%d\n",strlen(arr1));//长度肯定是整数嘛,我们用%d来打印 //strlen在数arr1的时候应该是3 printf("%d\n", strlen(arr2));//求长度的时候也是遇到\0才停止,所以是一个随机的值 //在计算字符串长度的时候\0是结束标志,不算作字符串内容。是统计个数的时候不统计在内的 //但是对于arr2来说统计玩c,后面还要统计多少个字符才能遇到\0都是未可知的 //所以strlen统计的arr2是多少是不知道的,就可能是一个随机值 return 0; }
编辑
解释:
arr1和arr2的区别呢?
他们里面就差一个\0
像arr2这种没有\0的字符串是不能使用%s来打印的
但是你想要使用%c一个一个字符的去打印也是没有问题的
上面这些就是为了告诉我们字符串是上面,已经字符串中的\0是干什么的,
她是作为字符串的结束标志而存在的
这个结束标志是在统计长度的时候,和打印的时候遇到\0就停止了
五,注释
1,代码中不需要的代码可以直接删除,也可以注释掉
我们就会将写注释方便我们去理解,当我们遇到不想删除的代码我们就可以注释掉,
让其不在发挥作用
2.代码中有一些代码比较难懂,可以加一下注释文字
我们在上面写的代码当中,为了让我们更好的去理解代码,
写注释就是一个解释这个东西到底是啥,有啥用,帮助我们理解代码,帮助别人阅读代码的
int main() { /*这种注释方式是C语言自带的,可以一次注释多行, 但是这种注释方式是不能嵌套注释的,如果它里面已经有了/**/就会不能完全注释掉*/ //这是c++的注释方式 int a = 10;//创建一个整型变量,并赋值为10 return 0; }
c语言风格的注释/*xxxxxxx*/
缺陷:不能嵌套注释
c++语言风格的注释//xxxxxxxx
可以注释一行也可以注释多行,能嵌套注释
总结
以上就是今天要讲的内容,本文仅仅简单介绍了字符串的基本概念及和注释,可以让你在c语言王国的探险更加有趣,充实。