00:00
同学们,我们继续来看第九套选择题,第31题,第31题呢,它是这样一个题,他说下面是有关C。语言字符数组的描述,其中错误的是哪一个?先看第一个A,不可以用赋值语句给字符数,字符数组名复字符串,这是肯定的,就是说咱不能说定义一个字符数组过后给他复字符串,这是这是这是这个是对的,A这个是对的哈,A是对的,分析。第一个A是正确的。那么就直接输错误就行了。B、可以用输入语句把字符串整体输入给字符数组,这个是可以的。第三,第三一个字符数组中的内容不一定是字符串,这个是错的还是对的呢?就是我们第31题,这个应该也是正确的,因为我们字符数组其实也可以直接放整数,因为我们知道字符它和整数其实是可以相互这个使用的,就是你直接给他付一个11,付个12也是可以的。
01:09
字符数组呢,只能存放字符串,这个就不正确了,所以说这边要分析出来,就是因为。因为字符和和这个整数哦,叫数值吧,数值呃可以通用,通用因此。因此我们字符数组,字符组可以存放什么呢?可以存放数值进去,或者叫整数啊,整数进去当然不要越界。因此答案。当然了,我们就应该选D。单选D,错的。我们再来看第32题,第32题说下面函数的功能是什么,也就是说32题他让我们去呃判断,或者说去推导这个函数,它完成什么事情,我们仍然是分析一下。我们看第一个题,他说。
02:01
第一个题。第一个题呢说,呃,将A所指。将A所指字符串赋给B所指空间,好像这个不太对吧,对不对,好像是把这个字符串拷贝过去一样,这种感觉实际上呢,并不是这样子的。第二个是指针B指向A所指向的字符串,那这个答案是正确的,答案是选B。这个C肯定不正确,将A所指字符串和B所字符串进行比较,这个显然不对,因为你这个比较的话,这应该是个这个地方明显是负值吗。并不是,并不是一个所谓的这个相等什么的,对不对,检测A和B所指字符串中是否有斜杠零,这个显然不是这样子,如果斜杠零的话,它应该有个退出语句,也没有好这个答案就应该选B就行了。第32题、33题。设有以下一个函数,这个函数呢,它没写完,它只是告诉你这是一个函数。
03:02
那么我们来分析一下,分析同学们看一下这个函数,它的需求是,它这个是什么样子的一个函数啊?该函数函数返回类型为。Void就是它没有返回值,然后呢,它的行参行参一个是int,一个是圈新能理解哈。明白这个过后呢?紧接着看下面他说,则下面对函数指针的定义和赋值均正确的是哪一个?均正确的是哪一个,我们先看第一个题,第一个呢,他说把这个定义你看,他说把放付给PF,显然这不行,为什么呢?因为你你这样写的话,你这样写的话,虽然是一个函数指针,但是它是可以,它只能接收一个没有行参的这样一个函数,说这个A错误的原因,我要指指出来。是不对的,是错的,错误。
04:02
错误的原因我说一下。原因是因为PF这个函数指针,它确实它确实是一个函数指针。这个是没有问题的,嗯,就是说它,嗯,它确实是一个函数指针,但是呢,你。你这个地方他能接受的是什么呀?对他能接收的,其实呢,是一个不带行参的啊,所但是他是可以接受呢,但是他是接收PF。PF指向的是不带没有叫没有没有行参的这么一个函数,但是你现在我们放是有的,所以说这个肯定是不对,对不对,好,我们接着往下看。看着,那我们再来看第三,呃,第这个题,这个这个为什么错呀,同学们。这个为什么错了,它就它根本就不是一个函数指针了,这个时候错误的原因是PF,呃,不是一个函数指针。
05:09
它是一个什么呢?它是一个函数原型,它返回的返回的类型是包的心,对它是什么呢?是一个函数了,是一个函数的原型了,或者函数的一个声明,对,所以他根本就不是函数指针,所以说这后面这个话肯定就不能这样写了,再看这个是为什么呢。啊,这个错误的原因那就更不靠谱了,你看他居然写了一个新PF错误了,没有这种用法了,新F不能这样用是吧?第第五一个是正确的,第五一个你看它这边是一个函数指针,而且它可以接收的是一个int和char这样的一个。对,但是呢,他这边给的呃,给的是一个呃,把这个地址给他了,所以说如果这里面正确的话,应该选D啊,答案选D。好,我们看第33题,第33题啊,第34题哈,第34题呢,我们看一下这个是什么样的,我们就做一个分析。
06:08
我们来做一个分析,好吧,分析第一个。同学们跟上我的思路,首先我们看这个地方要明白,就是这这个地方最它的考察点是一个局部变量,它是考察点是什么呢?他考察的考察的是什么呀,是呃静态,静态局部变量。变量的一个特点是什么特点呢?这个局静态局部变量只会被只会被初始化,初。初始化一次。把这个特点拿到就可以了,那么我们来看一下它是怎么做的哈,首先A等于三,SS是一个int,没有赋值,它第一次调用这个会有什么效果呢?大家看他第一次调用这个的话。
07:02
你调用FA,然后呢,把这个结果付给S,我们看他会怎么走,首先第一次进到这里面来A。会等于这个地方就是它这个F函数里面的啊,F函数里面这个A呢,就等于一等于一完了过后呢,A加加。A就是NN加等于A加加,那这句话其实这句话其实就是等于N等于N加上一个A加加,是这样子的吧,同学们可以这样理解。那这样理解的话呢,其实是相当于说是做件什么事情呢?就是N加上AA再自加,因此这样做完了过后,其实N呢,它应该等于几呢?应该是等于。因因为N这边传进来是呃这边呃,大家看啊,这边传进来的这个A是三,因此它这个N呢,就是三,三加上一个一等于四,同时A加加A就变成了二。
08:04
变成二好,整个这个结果返回回去过后,外面这个S就变成了什么呢?变成了四,能看懂吗?紧接着呢,他又执行了这样一句话。这样一句话呢,我们来继续往下走,还看里边的变量哈,A。A,当它因为是个静态局部变量,因此只会被初始化一次,所以进来过后,这个A在这个地方,它仍然等于二。等于二,那在吗?等于2N加上一个二,N应该等于四了,所以说这个地方N就应该等于六,能看懂吗?N等于六,N等于六过后再执行这个A加加,所以说它这F函数里面这个A呢,就变成了三。变成了三,变成三过后,这边它返回的其实是一个六,所以说返回去过后六呢,这个S就相当于说等于S加上一个六。
09:05
是不是这样子的呀。对。就说哦,不好意思,这面分析有错误,因为你第二次传进来这个N呢,这个这个N呢,在这里面,这个N其实还是三,所以说它仍然是三加上,应该是这样的啊,刚才我们分析有问题,因为你在第二次调的时候呢,它传的还是A,这个A呢,还是命函数里面的三,因此它其实还是三加一个A加加,只是呢,这个时候刚刚的时候,这个A等于二,因此应该是三加二等于五才对啊,刚才老师说说的有问题,加完了过后这个A再支撑一下。但是这个时候呢,N其实是等于五,它返回一个五,那它返回一个五的话呢,其实就是呃,这样子的,就是相当于S加一个五,那么S原先是等于四的,所以说其实就是四加五。四加五的话就等于九,答案呢应该选C,答案就34题,咱们应该选的是C才是正确的。
10:07
好的,紧接着继续来分析第35题,分析一下第35题呢,它的考察点是宏替换,它考察的是宏定义,宏定义也就是这边会涉及到一个宏替换的问题。我们来看一下他第一个动作哈,就这句话会发生一个什么事情呢?来推一下会S等于。它是ffa加一,那么F是个X,它带一个形参的,所以说它事先其实是这样来的,然后呢,这里面A加一替换我们的X,注意没有小括号。因此它是这样一个结果,这样一个结果的话呢,我们看A等于多少呢?A是等于三的,明白吗?A是等于三的,所以说它在替换完了,应该是三加上一乘以三,再加上一乘以三,再加上一个一,当然这个就应该等于十。
11:06
所以说我们第一个这个S其实就等于十了,因此推出了S就等于十记住了,紧接着呢,它又执行了下一个替换。这个替换呢,跟原先不一样,是它这里呢,是把它的这个参数刮起来的,括起来的,所以说它这替换完了过后,应该本身是这样子的,T等于X乘以X,再乘以X,但是会进行这个参数替换,A加一了,注意这个地方为什么有小括号,是因为它这个地方带的时候带了小括号进去的。看到没有?OK,这帮他在传的时候呢,它是一个简单的字符串替换,所以说你传的小括号呢,它也会有小括号。就这样子的,那这个就很简单了,那A加1A是。A是多少呢?A是三,对不对,那就相当于是四乘以四再乘以四等于多少呢?
12:05
对,那就是64喽,因此我们推出来T就等于64答案。答案。答案就应该是输出一个十,再输出64好,选择哪一个呢?就应该选择A答案。这个就应该选的是A答案。没问题吧?这个选择是A。答案。好,那么这这个前五个题呢,我们先几个小视频啊,然后接着我们开着再看第36题。
我来说两句