00:01
我们看一下字符数组和字符串在C语言里边呢。在C语言里面没有一个专门的数据类型是字符串的,它是用什么呢?它是用字符数组来表示字符串,这点请大家一定要注意,所以说呢,我们来看一下字符数组。字符数组我们先看一下它的基本介绍,用来存放字符的数组,我们称之为字符数组。那么字符数组有它自己的一些特点,请同学们认真听。先看几个案例,同学们看这里。圈A,然后这个中括号里面写个十,这个就代表一个,一为字符数组,那么这个十呢,代表它的什么?它的大小或者长度,长度为十理解。那有些同学老师下面这个是什么呢?如果我们这这有这一个两个中括号,可以看到第一个是五,第二个是十,那么这个代表二维字符数组,那二维数组呢,现在我们还没讲说这个呢,我们后面想讲这个是二维数组,后边我们详细啊,详细介绍二维数组。
01:13
二维数组。二维数组我们后面详细介绍,所以说你知道在我们C语言里面呢,如果要去定义一个二维数组,其实这里面有两个中括号,看到没有,OK,那我们再来看。就是如果说我们在定义一个字符数组的时候,我们也可以同时给它赋值,比如说同学们看这里。看这里,我对面有一个C字符数组。然后呢,在这里边我给了它一些是元素,大家可以看到它的大小呢,本身是20,但是我没有给到20,我们也给到20个呢,就相当于说给部分数组元素赋值。
02:00
对不对,这就是我们的在定义一个字符数组的时候,同时给它元素附图值。各位,最后我们总结一句话,字符数组实际上是一系列的字符的集合,也就是字符串,在C语言中呢,没有专门的字符串变量,也就是说没有这个叫做string的数据类型。很多语言里面都有一个专门的数据类型叫菌,但是在C语言里面呢,它是没有的,它是用字符数组来表示菌,通常用一个字符数组来存放抽串,这就是我们讲的第一个,那讲完这个呢,同学们可能会不太明白这是什么,同学们我们来给大家测试一个哈,来一个简单的入门小案例。那这个入门小案例呢?我给大家重新写一份来。在这里我们新建。一个文件哈。我们新建一个文件,叫做字符数组CHAR2DEMO0101,跟着老师思路。
03:05
那然后呢,我在这里把他的这个CPP改一下。我们引入一个头文件STDL。然后呢,咱写一个主函数对不对。写一个总函数,然后我把这个拿过来给大家用一下,比如说。刚才我们这儿。有这么一个字符数组,我拿来用一用。那么这这个就是什么呢?各位同学,我们这儿。它这个地方是因为带过来有些我们重新写一下哈。写一下,因为他这边可能有一些字符它不识别,我就简写一个汤姆吧,T。对,然后呢,M汤姆,好,我就不写刚才那个了。欧汤姆,好。这个呢,大家看,其实这就是一个什么呢,就是差是一个一为。
04:04
一为。字符字符数组对不对,然后呢,我们给它付了前面三个元素,给给什么呢?给它的部分,给部分元素赋值。复值好的,那现在呢,我们来输出一下,看看它的效果,输出非常简单,输出的时候呢,因为字符串的本质,它啊字符数组本质就是字符串,所以说它在输出,用S来输出对不对?好我呢给大家来个C,为了好看给恰一下。各位朋友,我们运行一下,先把这个注销了。这是一个测试程序。好,我们运行之,我们可以看到呢,它输出汤姆。他会输出汤姆。运行。看效果。那么看输出了汤姆啊,这个汤姆这写错了,写反了汤姆。
05:00
TOM。这个。换一下就行了,Tom,好,这是我们的第一个快速入门的小案例,那接着接着呢,我们来看一下字符串的注意事项,这个地方是我们的一个重点。在C语言中呢,字符串实际上是有一个nor字符终止的一个一维字,一维数组,因此一个以no结尾的字符串包含了包,包含了组成字符串的字符,也就它是其中一部分。那这句话是什么?怎么去理解呢?怎么去理解呢?我我给大家来看一个示意图。同学们看我在,呃,我在这儿有一个图,大家看一下,一目而了然哈。比方说同学们看。嗯,这样子吧,这样子我我这画一个示意图,我用这个来画,应该说的更清楚,比如说这是我们的一个什么呢?好的,我写到这里哈。
06:03
这是我们的一个字符串。这是我们的一个支付方案,这个大家呢。可以看到字符串,实际上我是写的一个字符数组,对不对。那么这个字符数组在内存里面,它是怎么存放的呢?我给大家画一个示意图,比如说这是我们的内存。没问题吧?那这个内存它怎么去存放我们这个C,呃,这个C字符数组呢,它这样存的C,注意听它C,然后呢,这个C指向了。一个空间,这个空间里面呢,其实有多少个空格呢,有20个。有20个,因为你的大小是20嘛,所以它其实是这样子组成的,我跟大家。嗯,这个。这个啊,这个画起来有点费劲哈,有点费劲,我这样画吧。我这样画。
07:01
啊,画起来比较费劲,大家看一下就行了,比如这是我们的一个空间里边呢,我放入一个个的。这个小格子一共有多少个呢?好,一共有20个,但是20咱们这个化学太费劲了,好吧,我就我就写。简单一点写六个好不好,因为这个太多了,我这整不过来。二。三。是。五。六。好,现在呢,我一共有几个号,1234567,好七,那我这写成七吧。行气。那么这个在这个空间里面有七个元素组成了这个字符数组,对不对,那么它这里面怎么存放的呢?首先第一个它存的就是我们的T字母。没问题吧,第二个存的就是m o to to Mo,第三一个呢就是M,注意下面这个存的是什么呢?
08:05
各位,下面这个呢,它存的是一个斜杠零。对,那为什么要存一个斜杠零呢?它会默认在最后给你存一个斜杠零,表示字符串结束了,那有些同学说,老师这后面还有三个格子怎么办呢?未知。就是这个这个就就不知道是什么东西了。这里面这些这些东西呢,就是一个未知的东西了。也就是说。这个就说这个空格,这个元素里面存的是什么,这个存的是什么,这个存的是什么不清楚。未知可能是一个。特殊的字符也可能是一个垃圾,垃圾值都有可能。明白这个意思吧,所以说你在这输出的时候呢,可以看到我在这里输出一个字符串,我在输出这个C的时候呢,这个系统会怎么处理呢?系统会会这样处理。
09:01
这样处理。当。他从他从什么呢?我给大家写到这里啊,他是这样处理的。嗯,从第一个字符,从第一个字符开始输出。开始输出。直到。直到,直到什么呢?直到了,遇到。啊,直到遇到哪里呢,遇到。他遇到了这个习杠铃。就表示OK表示什么呢?表示结束了,表示该字符串,该字符串结束。结束,也就是说,也就是说这个系统在输出的时候呢,他先把这个T输出来,再输一个O,再输一个M,但是这个时候呢,他发现已经有个斜杠斜杠零了,OK,他一旦发现有个斜杠零,他就认为你这个字符方结束了,他认为后面这些内容呢,是未知的值,或者说是垃圾值。
10:03
那么它就不再输出,因此你在这里看到输出的结果呢,其实就是汤姆,而没有后面的东西了,你看。你看这个地方是不是只输到只输到这个Tom后面的值就没有输出了。后面的字就没有输出了,好,这一点是我们需要同学们知道的,所以说回头再来看这句话呢,大家就很清晰了哦,在C元中字符串实际上是以使用no字符字符,这个no字符就是斜杠铃哈,各位同学就是这个斜杠铃呢,就是我们的空字符,那有些同学,有些同学说老师为什么斜杠林表示的空制符呢?我们打开原先给大家看过的一个阿斯柯玛值比对应表,你们就明白了。大家看这里。往下拉啊。各位,大家还记不记得我们十进制的零,十进制的零,它对应的就是空字符,就是诺,所以说呢,我们在这地方写的是什么呀?写的是呃字符串,它是以空空字符终结的,也就是斜杠零终结的字符数组,那么再来看斜杠零是阿斯克玛表表中的第零个字符,就是零表示的,用空表示及空字符就是同学们刚才看到的这个含义。
11:20
明白。该字符既不能显示也不是控制字符输出,该字符不会有任何效果,在C语言中仅仅作为字符串的结束标志。好字符串。字符数组的一个内存布局图,老师刚才在这儿已经画过了。应该很清晰,应该很晰,这个很重要,同学们不要小看这一点哈,这个其实是非常重要的,如你如果你这个图没有理解到后面很多东西,字符串的一系列的内容,你都很难理解好,这个呢,我们就说到这儿,那么我现在请同学们思考一个问题,请同学们思考一个问题,如果我这写了一个差三。
12:05
然后里面写了ABC输出什么,为什么。我问大家,假如说我在这里再定义了一个字符,注意听哈,当然string吧。三。我在这里面附了三个字符,哪三个字符呢?ABCAABC。那问问同学们,问一个问题。问问同学们一个问题啊,这个C等于我为了好看呢,换行好吧,我们再输出。我们再输出这一个string。然后呢,我输出的是十俊,我想请问同学们这句话会输出什么?这句话会输出,输出什么?可能有同学会认为输出ABC。其实有可能输出ABC,但不一定,为什么呢?我们先执行一下,大家看一下这个地方到底是不是ABC,我打个问号运行之。
13:01
运行之OK啊,我们现在运行一下。我们要运行一下,我们发现非常的奇怪,非常的奇怪,你看它输出是ABC不一堆乱码。一堆乱码,为什么呢?诶说刚才有同学说老师不对啊,你不是说这个就应该是ABC吗?为什么他说的是一堆乱码呢?各位同学能分析出来吗?有同学能分析出呢,我们还是把这个拿过来看一下,各位,如果这个地方你定义这个string,它在内存里面会怎么存放呢?老规矩我们仍然复制一份。OK,我复制三个格子下来。我复制三个格子下来。好,那么这个地方就没这么长了,我搜一下好不好,那现在也就是说你可以这样理解,相当于说我们这里面有一个叫string的字符数组。使俊的字物数组,它呢?它指向我们的这个空间。
14:00
能理解吧,这里面第一个放的是A。根据你的要求,第一个放的是A,第二个放的是B,没有问题吧,第三个放的是C,结束了。大家看。完蛋了,现在知道为什么,问题在哪里了吗?你这个是string这个字符数组,你第一个存的是A,第一个存的是B,第三个存的是C,那问题来了,你知不知道它后面的空间,因为后面还是有空间吗?你不得不承认,后面我们还是有,还是有这个内存,还是有内存条的呀。问题是在于后面它这个格子。就是同学们看到的这个。就是这个C后边。这个C后边,诶这个地方。我复制几个啊。我复制几个,当然不复制那么多了。你知你敢肯定C后面他这个是什么吗?你敢知道他这个后面是什么吗?你敢知道这个后面是什么吗?你不知道这些,这这个C后边就是你们看到C这个字符后面的空间存的是什么,你不知道不知道,不知道,你完全不知道。
15:13
而我们字符串出来输出的时候呢,大家刚才已经知道了,它一定是要遇到一个斜杠零的时候在结尾。那也就是说你如果这样输出的话呢,除非你的运气很好,你刚好就遇到最后这一个C相里,他是这样输出的啊,它怎么输出,先把ABC输出。这个是什么问号,不知道是什么,不知道是什么是什么,它就给你输出来了。那可能就是个乱码,这个也是个乱码,也给你输出来,这个还是个乱码,还给你输出来,最后终于碰到了一个西杠铃就输出了,这就是为什么啊,同学们看,这就是为什么你在输这个ABC的时候,这个结果呢?会是这个样子,也就相当于说他把ABC输出来过后,C后面呢,最后后面都是乱码,最后在这个M后面,他终于找到一个斜杠里结束了。
16:08
结束了,原因就是这个样子的。原因就是这个样子的,明白吧,那有些同学说老师我怎么解决这个问题呢?可以这样解决来,你可以在你你你这样子加一个四。加一个事,注意听啊注意听,你在这边呢,人为的给他一个行李,这个问题就解决了。这个问题就解决了,也就是说,也就说如果你写你写这个四,那么你说我第一个给的是A,第二个给的是B,第三个给的是C,第四个呢,我给个斜杠力,那换言之就是说你在这个地方呢,你人为的给他一个斜杠力,那就没没问题了,因为这个时候在输出的时候呢,它会ABC输出来,A斜杠零结束。这个时候就不会在出现输出乱码的情况。来看一下运行之。运行之,哎,同学们可以看到现在呢,输出的就是ABC对不对。
17:03
那问题又来了,问题又来了,诶说老师不对啊,那你这个说不过去,你看啊,你刚才这个汤姆。你,汤姆后面。你不是你只给了TOM3个字符吗?那后面还有20个,或者说这个是七吧。我们回到这边来,回到这边来,各位。说老师,那你这个汤姆后面为什么它会给我们加一个斜杠零呢?为什么这个里面会加一个写个零呢?各位同学你要看一下,你要仔细看清楚了,你这个七是不是有七个空间呢。你本身是有七个空间的,你只使用了三个空间,那人家这个系统就会默认给你加一个斜杠零。因为你的空间足够。你为什么刚才这个山。ABC后面它没有办法给你加行,因为你你本身就三个元素,你全部占用完了。
18:00
你占用完了过后,人家没有办法跑到后面给你加个斜杠零,明白了吧。所以说所以说就是这个原因,后面我们总结出来就跟他说清楚了啊,说清楚了就说注意听结论。注意听这个结论就可以了。结论结论,如果我们,我们父子使我们在。给某个某个字符数组负初值时,负。副指使副指使。啊,负值十,那么这个初值负的,这个初值的个数小于小于这个字字符数组的大小,那么最后那个呢,会被默认为斜杠零,否则后面是未知的字符啊负值时,呃,再给再给某个字符数组赋值时,赋值时负的。负给的元素的个数的个数小于小于该数组的长度或者大小,则则会自动的会自动。
19:13
在后面后面加加一个斜杠铃,OK表示表示什么?表示字符串结束。OK,结束。如果否则的话,如果你负的这个元素的个数等于。等于数数数组的长度,那么这个后面的元素是未知的啊,如果就是否否则啊,就那样写。如果。哦,这样写,呃,这是第一种情况吧,我们写到这一栏,因为这段特别重要,老师呢,就只能多说两句了,好不好,第二个。第二个付给的元素。表示这个结束。
20:02
结束。啊,OK。那么负给的元素的个数等于。等于该数组的长度,则,则,则最后这个元素则。则不会则不会啊,不会自动自动添加,添加这个西杠里。那这样子就会很麻烦啊,这样就会很麻烦,所以说这个地方一定要小心,老师把这个讲清楚了吧,最后我再给同学们举个例子,大家觉得这样会怎样?如果你这样写会怎么样呢?假如我们再来一个小案例啊,各位同学,如果我这写了一个使俊二。中间我没有给这个,我给的是一个什么呢?比如说我给的是JA Jackie。J。C。
21:00
K Jack,各位。我想请问同学们,如果我输出这个十寸二,大家觉得会会怎么样呢?如果我输的是STRING2,注意听讲STRING2,请问这个时候它输出的是什么?是Jack呢?还是Jack后面有一些未知的东西啊?同学们,我可以告诉大家,如果你这样给的话呢,你如果你这样复制的话,其实这个阶梯后面呢,也不会给你默认加斜杠零,这个也不会啊,这个后面也系统系统也不会不会自动自动添加,添加这个斜杠岭结尾。不会的,也就是说你这样输出呢,很有可能也是个乱码。但是我我为什么说可能呢,就是因为假设你走了狗屎运呢,对不对,那JK后面这个K后面他刚好就碰到一个邪二零也是有可能的,只是这个概率呢比较小。
22:01
所以这个地方呢,他应该输出是Jack,后面可能是一堆乱码Jack,然后后面是乱码。乱吗?后面是乱码,但是也有可能没有乱码,为什么呢?因为K后面假设刚好就是个斜杠零,你就。你就合适了,那我们看一下,一般来讲就是一个乱码啊,我们看一下是不是这样子的。我们可以看到Jacky后面是不是又是一堆乱码呀?JKR,当当当,ABC就这样子的。好,同学们,那关于这个字符串最基本的一个介绍和它的一个注意事项,老师讲清楚了,一定要认真的领会,因为这个字符串数组还有字符串它是一个难点。就是说对于我们初学者来说呢,它是相对有一点难的,好我把这个梳理一下我们刚才讲的内容哈,来,因为这块呢,开篇名义是比较重要的,老师呢就马上梳理。这块我下了功夫的,大家讲的,因为这块我反复讲过,将来一定是一个重点。好,我们怎么讲字符串的呢?我们先给同学们做了它的基本介绍。
23:06
是不是OK,这边呢,举了几个例子。对,举了几个例子,对,然后呢,这个地方呢,我们做了一些说明,这个说完了以后,对是不是老师就给同学们讲了他的一个使用的注意事项,这几点,这几点尤为重要哈,尤为重要,好,我给大家呢,也阐述到笔记中。只要认真听这个都没有,没有难度,但是你一定要认真的去理解,好吧。给。这边呢,来做一个标号。七杠零,那这边有几个小案例,这边输出什么呢?是我说一下啊输出。输出的是这个他Tom后面是乱码。乱码。哦,不知道是不是好案例,也是案例。案例演示。好,那么案例的演示呢?就是刚才老师在这画的一个图,我这说清楚了,好,说清楚了。
24:03
好的,我把这个案例呢给各位朋友板书到笔记中。板书的笔记中,这边还有一个特别重要的示意图,就是呃,就示意图我也给同学们拿过来好不好?这个示意图就是这个,这个汤姆在七的情况下,它是这样给它赋值的。哎,它是对应这样一个示意图,我给大家画粗一点。这是对应这个示意图,而你这个STRING3ABC复制的时候呢,它对应的是下面这个示意图。叫大家是不是一目而了然呢?注意这这个地方的这个地方内存,为什么我把它分成两截,大家明白为什么吗?因为后面这一节的内存并不属于string的一个分配空间,所以说我把它画成两截的,注意听哈,好,那这个示意图呢,我也给同学们板书过来,相信讲到这儿同学们多多少少呢会对它有一个理解了,好,我画出的示意图。
25:05
呃,这个示意图呢,我就放到这上面去好吧,因为这个是属于字符串内存的一个布局,布局的一个示意图,这边有一个结论,就是刚才老师这画了一个结论,蛮重要的,我勾一下这。把重点呢给它划划划划拉出来。好,同学们,我放这儿再说一遍啊,这块非常重要,一定要认真理解好。同学们关于字符串的基本介绍和它的一个内存布局,就给各位同学讲解到这里。
我来说两句