王国探险记系列
文章目录(3)
前言
一,什么是字符串呢?
1,那C语言是怎么表示字符串的呢?
"hello world.\n"
2,证明字符串的结束标志是一个 \0 的转义字符
3,证明字符串的结束标志\0 的重要性
3.1我们在arr2的字符串数组后面加一个\0然后看结果
四,我们还可以通过计算字符串长度来证明字符串后面有一个隐藏的\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语言王国的探险更加有趣,充实。