00:02
变量作用域的课程练习题,我们来看一下。那么为了让大家对变量作用域有一个更加深入的认识,我们来做几道题。首先我们看这道题,同学们看,请思考下面的代码,它输出什么内容?它输入什么内容,我们应该从哪里开始阅读呢?我们可以从这边开始读,首先看这里,这是一个double price 200,它是一个全局变量,看到没有?然后这边有一个TEST01,他在这里输出了一个price,我问大家此时此刻这个price指的是哪一个?这个就指的应该是,你看他在这个test的领域里面,并没有定义自己的price,也没有接收一个price,所以说它就是指向这个price,就是。它就是全局的这个变量。是这意思吧,那这个时候呢,他应该输出的就是200。
01:01
能理解不?那紧接着这有个TEST02,这个TEST02呢,它在这个地方把这个price,大家看他把这个price重新设置成了一个2500,那我问大家此时此刻这个price指的是哪一个呀。注意这个price,因为它没有定义,所以说这个price指的也是全局的。这也就是说这个22500指的是全局的这个price,相当于说他把200改成了250。那这个时候他应该输出什么呢?显然这个时候他应该输出。250。紧接着我们来看一下它的调用方式。它首先。这样来调用的,这是我们的主函数。是不是主函数啊。这是我们的main函数,Main函数呢,它上来过后先去输出了这个price,显然这个price指的就是全局的,所以说这个地方应该输出200。Being。
02:00
紧接着他调用了T的零一,T的零一是不是调用这了。调用这里呢,同学们,我问大家一个问题,它调用这,如果它调用这里的话,这这个地方应该输出的也是一个200。这个能理解不?肯定是200,然后他调用了test的零二,T的零二,是不是把这个全局的price改成了2500,所以说他在这个地方会输出250。这个能理解吗?因为他把改了嘛,这个相当于把全局的price改成了250,因为这个price指向的就是全局的price,紧接着他又重新调用了TEST01,我问大家这个时候test的零一输出什么。显然这个T01它又重新调了一次,调一次呢,这个price仍然是指向全局的,但是全局的已经被你修改了,也就是在这里它修改了。他将。将这个全局price改成了250。
03:00
因此这边输出的也是250。所以这个结果就应该是两百两百二五零二五零,我们试一下同学们。我们给大家验证一下好吧,那现在呢,我在这儿直接写一个练习。就是变量的一个练习题,V exer c,这是我们第一练习好吧。那同样道理啦,我在这里呢,给大家把这个名字改成C。好,紧接着我把代码拿过来。格式化一下。那格式化以下过后呢,我们需要引入一个头文件,这肯定的。Std。IO,注意听好都很简单这个东西,那么现在我们执行一下,看看是不是跟老师分析的完全一样走起来。走起来。好跑起来过后呢,我们看输出,诶这个这个这是前面这个没有注销。前面这个没有注销,我们再执行。
04:02
我们可以看到这个时候输出的结果应该跟老师分析的一样,对不对,大家看第一个是200,第二个也是200,第三个是250,第四个也是250,现在我有个我有一个需求,同学们假如说假如啊,我把地方改成了double。假如我把这个改成double,请问输出会有什么变化?我先问大家,如果这方改成一个double的话,是不是相当于我在TEST02里面定义了一个局部变量price,那这个时候这个price。就不再跟我们全局的price发生任何关系了,因为你自己有吗?不是讲过吗,就是他在查找这个price的时候,他首先在自己的就近原则看看自己有没有。发现double是我自己定义的,显然这个price呢,指的就是自己的price,而跟全局的price没关系,所以这个地方250呢,就不会去修改全局的,那如果这这这个地方改成double过后,这边应该有什么变化,这个还是200。
05:06
这个仍然是200,这个地方仍然输出200没问题,2250,因为你这这地方price,呃,就说这个地方输出的price肯定指的是他自己的,是不是讲过这个就近原则,就近原则,那这个时候因为你这个price呢,并没有修改。全局的price,所以说这个T的零一输出price的时候呢,仍然是200。这个大家能绕过来吗?因为你这么没有修改人家全局的吗?没有修改全局,我再输出全局,当然还是200。这是理所当然的事情,好,同学们,我们再来执行一下,看效果是否一样。跟我们想分析的是否一样,我们看一下,好,你看跟老师分析的完全一样,两百两百二五零两百答案正确,好第一个题我们就评价到这里看第二个题。那么第二个题呢,我们老规矩,直接把这个代码拿过来,我们一边分析一边看它的输出好不好,那这样子我把这个先保存一下,注销哈。
06:05
注销,然后呢,我们写我们的第二一个小练习。再多做几个练习,大家就印象非常深刻了,Vreer cc02没问题吧,同学们,这是我们变量的第二个小练习。同样把它改成这个代码呢,非常简单,我们拿过来用一下,同样。这一步为什么写成啊是int。少写了个T,然后呢,这边我们仍然include std,没问题吧,同学们。那么这个写完了之后,现在呢,我们来看它输出是什么,我们一步步的看,这是一个全局变量,不说了,这个地方是定义了个局部变量,名字虽然是N,但是是局部的,因此这个这两个不是同一个,紧接着方程二,方程二呢,这边输出的这个N应该是指的哪一个?这个N,我问同学们,在方二里面这个N指的是谁?
07:01
指的是全局的N呢,还是自己这个行参N?这个地方一定要分析出来,他是这个地方的N是,这个N是。N是这个行参。主要是行餐。邢昌恩。上面这一个呢是局部,这个就是我们局部变量的N,这个大家应该很清晰看出来这个N啊,这个N就是全局的。是全局的,全局的变量。这个N为什么呢?因为我我这个N没我我在自己没有定义,我也没有接受行参,显然我只能用全局变量的N了,好现在呢,他上来过后,先在main里面也写了一个N,注意这个这个N是main函数里面的N,也跟外面的没有关系啊,这是幂函数的。Main函数的好,现在我们开始来看第一个输出FUNCTION1。方一,它调用的是这段代码,显然这个地方。
08:01
一就近原则,按照就近原则,这这个地方应该输出的是多少呢?应该输出的就是20。为什么是20啊,因为他到这里面来了嘛。因为你方式一一调用,不就进到这个函数上了吗?进到这个函数上,它显然执行的就是呃,自己的局部变量N,所以说输出20,大家再看这里。方式二方式二呢,它把这个N,这个N同学们,这个N指的是哪里的,是主函数里面的N。那主函数里面N传进去,这个N也就是30,所以说它在这里面呢,这个N指的是行参的30,所以说它输出的是30。能理解哈,也就是说这个地方的这这个方程二里面输出这个N,就是你传进的N能理解吧。好,紧接着再输出这个方式三,方式三里面输出的是全局的N,所以它应该是十能能理解吗?紧接着它写了一个代码块,这个代码块呢,就直接写了一个代码块也是允许的,在C语言里面直接写一个代码块也是可以的,那这个呢,这个N呢,指的就是代码块里面的。
09:08
代码块里面的这个N,说这个block n应该输出的就是事实。好,紧接着他又重新输出这个主方法里面的N,显然这个主方法N呢,跟你这个N不是一回事。那也就是说你这个地方输出的N,它就直接找自己的就近原则,找自己的局部变量N,显然这地方应该输出的是多少呢?30。代码写完,也就是说整个这个输出的结果应该是20 30,十四十,30,我们运行一下。来,先把我们来直接运行的同学们跟上老师思路跑起来。我们,诶这门代码是不是前面。有没有注销的呀。看他的问题是在哪里。哦,是这没有关闭。这个没有关闭,我们再来跑起来看看输出的结果跟老师分析的是否能够完全的一样,跑起来看一下。
10:08
跑起来看一下,我们标一标,第一个是20。OK,第二个是30。OK,第三个是10OK。第四,一个是事实。OK,第五一个是30 OK,完全的正确。完全的正确,没有任何问题啊,跟老师讲的分析的完全一样,那通过这个案例,我相信同学们对我们局部变量,包括全局变量,还有我们变量的作用域应该有一个较为深刻的认识了,较为深刻的认识,好的,嗯,那关于这个题我们就聊到这里好不好?那现在我把变量作用域的这几个题给大家阐述一下。好,写到这里。课堂练习题一课堂练习题一第一个题呢?是这个题是不是?OK,那这边输出的内容呢,呃,干脆这样子这个。
11:04
这段代码呢,因为我已经在程序里面有了,我直接把它拿过来,因为这边有分析的过程。对不对,他既然有分析过程,不是更方便吗。好,我把这句话拿过来给它放到这第一个题。这是第一个题。那么还有一个课堂练习二对不对。课堂练习二这道题也是问我们输出什么内容?是不是也是一步一步给各位同学分析了一把?那么这道题它的一个分析是在这里。我也把它放在我们的笔记中去,如果你这块还有什么疑惑,自己把这个代码拿来运行运行就可以了。好,同学们,那关于我们变量作用域就讲到这儿,到此呢,变量作用域的这个话题我们就讲完了。啊,这个应该有印象吧,每个地方我讲完了,也是梳理到我们笔记中去了,哪块不明白,把这个笔记打开自己揉一,自己运行一下。同学们关于变量作用域就给大家讲解到这里。
我来说两句