00:00
OK,现在呢,我们看36题,36题又是要阅读一堆源码。这个题也也有一点难度哈,我们先来做分析。那同学们先来做分析。首先同学们看看这里,嗯,刚才老师思路。同学们,同学们首先看这里哈,这A是A是一个二维数组,看懂了没有,就这是一个二维数组。是二维数组。好,这个看懂了,接着我们再看这个函数在干什么事情呢?调用这个函数,它把二维数组传给了这个放。这里这个大家能看懂是什么,它是一个,呃,它是一个指,它是一个指针函数啊,它它它是一个指针数组。啊,它是指向这个,应该说它是一个什么呢?它是一个数组指针,对它是一个数组指针,而不是指针数组,这个地方要看懂哈。
01:02
这里面这个A。就是这个A传进去,这个S是一个什么呢?是一个数组指针。什么叫数组指针呢?就是它指向的是一个数组,就是S呢,是指向对指向数组的。好,那明白这个道理过后呢,我们就来看一下这句话哈,N,嗯,这个NN传进来是四,K是零,看清楚了没有,也就是说这个这个地方传进来这个这个N呢是四,而K是零下面。做了一个动作,大家看这句话是什么意思?这句话其实相当于M等于S0,然后零这个能理解吗?那零这个S0 0S0,因为S呢,它是指向它把这个AA付给这个S了,相当于S指向的是哪一个呢?指向我们这个二维数组里面的第一个数组。
02:02
这个地方一定要分析出来,也就是说现在呢,S。S主题S指向我们。呃,这个A数组的。就A数组的。A数组的第一个,第一个一位数组。第一个一位数组。嗯,如果我画个图的话呢,就大概是这个意思,假设这是我们一个二位数数啊,1234,然后11,注意听哈,十二十三十四,然后21,然后22。23。24。31。32。33。34号。呃,也就是说这个是个二组,那么现在S呢,其实它就相当于指向我们的第一个一位数组,就这个。好,他走到这里面过后呢,他干了一件什么事情呢,大家看他,嗯,他把这个。
03:03
一个数就是第一个一位数组的S1给他,那么这个时候M呢,其实是等于一的,这个能分析出来不?能分析出来啊,然后呢,它做了一个便利动作for I等于一解小于NN线是不是等于四啊,那现在说相当于它是便利一到三。1N是等于四呢,就一到三了,I加加,然后他说如果SI ji大于M,就把这个M,把这个SI的值赋给M,诶大家有没有发现是没有变的,所以说这个I随着I的变化,随着这个I的变化,其实他是在做件什么事情呢?其实它是在遍历每一个一维数组里面的第一个元素。也就是说他第一次,他第一次是把一付给了M,然后第二次呢是取出。
04:01
第二个数组里面的11跟这个一比较,如果它大于M,就交换。紧接着呢,再看下一个一位数组的第一个元素,因为这个K没有变嘛,K一直是等于零的嘛,对吧,K等于零的,而只是这个I在变化,所以他又看21是不是这里面最大的,再看31是不是最大的。因为它便利,这个for循环只有三次,所以说我们看出来这个for循环在做一件什么事情,大家看懂了吗?其实这个for循环就是在帮我们找这个二维数组里边的每一个一维数组的第一个元素的最大值,有点绕哈,再说一遍,就是这个这个for循环是在帮我们定位或者在查找。二维数组里面的每一个一维数组的第一个元素的最大值,那显然就应该是31。
05:01
好,我把这个图给它截一下,因为。这个图还是蛮重要的。如果这个图理解了,那么就OK,好,我看一下就是针对。针对这一个for循,针对这个for循环。我们先把这个土拿过来。我把这画画小一点啊,针对这个for循环的理解。就是这个或循环,他到底在做什么事情。他在干什么事情。就是。就是在。再找或者查找查找呃,就是二维数2A这个A这个二维二维数组的数,呃,每二维数组的每个每个维数组,因为二维数组的每个元素实际上是一个一位数组,每个一位数组的D。一个元素的最大值。
06:04
就是二维二数中的每一个一位数组的第一个元素的最大值是哪一个,显然就应该是31。那当然31,它后面把这个M返回来了,返回来过后这个显然这个地方就应该输出是31了,好,那就应该是输出31是。输出31,答案出来了。答案就是什么呢?就是我们的C答案没有问题吧,这是需要大家对这个代码有一定认识的,如果你没看懂,你是肯定答不出来的。还是有点小难度,对不对?好,紧接着我们看30 37题。37题这个题呢,看起来代码很多,其实并不难哈,我们看一下他到底在说什么事情,我们来分析一下。分析。呃,分析这道题呢,重点是在考察,他在考察什么呢?OK,他在考察结构体的一个传递方式。
07:06
结构体默认的传递方式默认是直直拷贝或叫直传递。直传递。那只要把这个明白了,这个代码就很easy了,大家看,首先呢,它整了一个结构体叫student,然后呢,这边定义了个AA和BA2个结构体变量,结构体变量是长这个样子的,B结构体变量是长这样子的,好,这是两个。是两个什么呢,OK。两个结构体变量没问题吧?那这个时候他做了这样一个动作,很很有意思,他把这个A付给了B。他他把这个A付给了B,这点一定要理解,是一个直传递或叫直拷贝直传递。传递,即它是一个纸纸拷贝。
08:00
如果是只拷贝的话呢,同学们应该知道,此时此刻这个B就也等于这个东西了,注意啊,是一个全新的一份数据。也就是说这个B和A是两个全新的,他拷贝了一份给他,明白吧,那就说现在呢,B也是这个东西了,A也是这个东西,那如果在内存里面画的话呢,应该是这样子的,A指向了一个空间,里面存的是这些东西,B又指向了另外一份空间,他存的东西和这个是一样的,你里面存什么就存什么,相当于说从这地方拷贝了一份给他过来。明白了哈,所以说这时我们在进行B输出的时候呢,其实输出的是照M85和这个,因此这个结果就出了,输出内容就应该是什么呢?输出内容就应该是这一节。这些内容。没有问题吧,那现在哪一个是呢,显然。
09:00
显然是我们的答案D,答案出来了。答案是D。也就是说我们第呃37题答案是选D第38题38题。38题这个题呢,他说假定乙建立下链表结构,链表结构这个图没有给我,现在这个题呢,我没办法画,我就简单说一下这个链表是什么样子就可以了,好不好,这是一个链表,比如说这是个节点。这是另外一个节点,这还有个节点,那么它这有个next域。Next域呢,可以通过这个next域去指向下一个节点,Next域再指向下一个节点是这样子的,然后它就是通过这个方式呢,来来进行这个考察。这个也不难哈,不难,就是这个一个简单的链表,很简单的,好,这个题呢,我们就先放一放吧,第39题。39题这个题非常简单,分析。分析一下。
10:00
Very的简单,大家看这个运算要理解它是什么呀?它是一个未预算,未。位左移,位左移运算,我们在前面讲课的时候,其实这些都讲过,位左移运算呢,是每移动每。向左移动一次,相当于相当于乘了一个二。明白吗?那也就是说你移动一次,相当于A乘以了一个二,那就等于A是几呢?A是四,四乘以二显然就等于八答案。八。对,所以说答案,答案应该是哪一个呢。答案就是我们的CC输出的就是八。最后第40题。嗯。好,第40题,同学们看,第40题呢,这个题的难度也很小哈,这个题呢,考察的是一个文件操作。
11:04
其实文件我们都讲过了。分析。分析一这道题考察考察的是文件操作,要理解,那么我们看第一句这点,它先创建的一个文件指针,然后呢,S1是China s2是北京,也就是说现在大家可以想象在我们的内存里边呢,你可以认为有个S1,它指向了一个字符串。但字符串呢,底层都是字符数组对不对,所以说是个C好,后面一个斜杠零。S2呢,对,也指向一个空间,是我们的北京,分别是B。E。I。J ing斜杠零没问题吧,那也就是现在在内存里面一个S1和S2长这样子的,然后这句话是干什么?能理解吗?他是打开了一个文件,如果这个文件不存在,就创建。
12:05
那么它是以什么方式打开的呢?可读写的方式,而且是打开这个二进制文件,然后这句话很重要,讲过没有,S271,这个是代表把S2的内容读入到PF所指向的文件中,写几个字节呢?七乘以一。也就是说,这个地方写入的文件是七乘以一个字节。那七乘以一个字节,说白了,现在我们这个文件里边,相当于说这有个文件哈,假如这个文件里边,它就应该写入的是哪几个,哪几个呢,就相当于把北京写到这个文件里面去了,就相当于说我有一个文件,这个文件叫A。BC点代套。大家看我,我简写的BINING7个。写到这个文件里面过后呢,Rewind,它这写了文件位置指针重新回到这个图文件,也就是说它这个时候呢,文件又指向这个。
13:10
最先前这个位置,然后呢,他又重新写,这次写的时候呢,是把一这里面的内容向PF里面写,写几个字节呢,写五个字节。相当于覆盖,那有说这个这个地方,也就是说同学们看到啊。我换一个颜色,相当于C覆盖了这个。B覆盖了。EI还覆盖了这个in,覆盖了这个节。然后A呢,覆盖了这个I,那也就说最后我们这个文件里面,他问最后这个文件里面放什么内容,你看嘛,是不是就是chinang,那显然这个答案应该是B,好,我把这个图截一下啊,这个图还是有这个题还是需要大家好好动脑筋的,我把这个图放这很重要的一个图。
14:02
这是操作示意图。因为不好讲,只能画一个图了。报警只能画一个图了。这里面要跟大家特别说明的就是这这个f right这个函数的含义是什么,我要再多说两句,第四一个啊,第三一个,我单独的说一下这个函数的函,它的意义是什么。意思是什么?它的意思是什么呢?就是将注意听将S2指向的字符串写入。写,写入到哪个文件呢?PF文件指针,指针指向的文件中写入多少个字符呢?写入。写入的字符字节数啊,字节数是七乘以一等于七。就这意思,因为这个地方呢,它有时候为了好写呢,它前面可能是说我这有一个字节的一个单位,后面写几个,比如说int,我要写几个int,比如说四,然后这边写六,这样一算就算出来我我要写六个字节,那这个时候呢,它是七一就代表我要写七个字节。
15:18
明白,呃,下面这个是一样的含义,FY的S1,呃,五一,这个就是把S1指向的这个字符串的内容向PF在写明白,那最后这个结果呢,显然就是ch channel NG,答案选B。好答案。就是我们的BB答案B答案。呃,就他了,各位同学,那关于我们C语C语言真题12套的选择题就全部讲完了,其实选择题不是那么好讲,因为它涉及到四个选项,还是相当于要给大家一个一个讲清楚,为什么这样子,就必须逼迫我们要去看源码,只要一看源码,你的速度就不会很快了,对不对,因为源码你得一一句一句的看。
16:08
各位同学,这一讲,我们就到这里。
我来说两句