00:01
同学们,我们来看一下变量的作用域。那我们在前面讲了变量的使用,那现在有一个问题需要我们去回答,就是一个变量它的作用域,也就是说它生效的这个范围是怎么去规定的呢?我们来看一下。这个作用域的问题,那首先我们看它的一个基本说明,所谓变量的作用域,它的英文呢是scope,范围的意思,就是指变量的有效范围。那么这里呢,我一共整理了几句话,我们来给大家讲一讲。第一句,函数内部声明,或者说定义的变量呢,我们就称之为局部变量。对,它的作用域仅限于函数的内部,这句话怎么理解呢?大家看我这里有一个案例,这个案例大家看一下就行了哈,大家看到这有一个。主函数,那么这个主函数里边呢,大家看到它使用到了叫C哈的这么一个函数,大家有发现C哈这个函数呢,我是在这定义的,看到没有。
01:07
在这里呢,我有一个叫name的变量,这个变量我是定义在say hello的里边的,对,那么在这个say hello里面呢,我们去用这个name是OK的,但是大家看到。如果我们在这个函数外,也就是在c hello的外面,我们去使用这个name呢?它会报错,它在这里会提示没有定义name,好,我给同学们简单的演示一下好吧,这个这个,因为这个没有什么太多难度,基本上就是所见即所得,所以说我就直接给大家看一下这个代码就可以了,来给各位朋友梳理一下。好,我把这些前面讲的先给他,呃,注销了好吧。先给他注销了。OK,没问题,现在呢,我们来讲一下变量的作用域。给给大家做一个小小演示,VR啊,VR变量的score,这是我们的第一个练习吧。
02:05
放这儿来。好,同学们跟上我的思路,然后呢,我把这个改了。好的,然后把这个代码拿过来用一下就可以了,我们,呃,为什么现在是错的呀,同学们。错误的原因是不是因为我们没有引入这一个include,对,没有引入我们std标准输入输出这个头文件。好的,引进去就没有错了,大家看一下就行,你看这里是不是我方内它直接告诉报错啊,但是这没有问题,看到没有,所以说我们这说的这里不能使用C哈的name变量,为什么呢?因为这个name是在c hello定的,那么这时这个name我们就称之为name。Name就是局部变量。局部变量,它的作用域,作用欲,诶作用作用欲。
03:01
在哪里呢?在仅限于,仅限于say hello say hello OK say hello函数中。对,这就是我们所说的第一个,好吧,我先放这儿,那紧接着我们来看第二句话,函数的参数。我或者叫做形式参数,它会被当作什么呢?它被当作函数的内内部的,函数内的局部变量如果与全局变量同名,那么会优先使用。也就是说,当我们这个局部变量和全局变量冲突的时候呢,编译器采用就近原则,什么叫就近原则?就是以局部变量为准,我给大家再演示一个小案例,还是以这个为例吧,还是以这个为例,我们看我写一个贸易的。比如说现在呢,我写一个F。F10这么一个函数,比如说这里面有个N,看清楚了。
04:00
这个N。好吧,这个N呢,我简单一点,我就直接输出,好吧,我就直接输出这个N。N等于百分号D,看它传递的是个什么。大家看这有这是不是有个N呐,然后同学们可以看到在这里呢,在这里我调用F10。看清楚了,我刚传了一个十进去。对不对,我给他传了一个十进去,然后呢,我在这里get恰一下,我问同学们一个问题。呃,假如这个上面我我去我不去调用这个十,Hello,我问大家如果我运行的话,是不是这边会输出一个N等于十啊。这个肯定是这样子的,我们运行一下。来同学们,我们运行一下,现在肯定输出N等于十,因为我这传的就是十嘛。对,我们运行。那运起来我们看到N等于十,那我要说的是什么呢?就是这个行参。这个行参其实在整个运行过程中也会被当作F10的一个局部变量,我这里说做一个说明。
05:06
就是形参,就是函数的形参,形式参数啊形式行参会。被会被视为视为什么呢?F10的F10的局部变量。就这么一个意思,那么那有些同学老师,那你这说的这句话是什么意思呢?就是说如果局全局变量和局部变量重名的话呢,就以全局就就以局部变量为主,那我给大家再写一个例子,比方说我在这边呢,定义了一个N等于20。你看这是不会报错的,因为你你这个在函数外的函数外部,外部定义的变量,注意听定义的变量。就是什么呢?就是全局变量。全局变量,那么全局变量呢,它的作用域呢,就在整个这一个,呃,整个这个程序里边都可以使用啊,它的作用域就在整个这个程序里面都可以使用,那么大家看这有一个N等于。
06:11
这个20,这有一个N传进去是十,那以哪个为准呢?是以这个为准,还是以这边传进来的为准呢?好,加一句话就可以了,加一句话就是我们所说的这句话。就是呃,如果当函数啊,当函数的局部变量与全局变量同名的时候呢,会优先使用局部变量这些了,写清楚局部变量。OK,那也就是说,也就是说,如果我这里运行的话呢,这边输出的仍然是十,而不是20。再说一遍啊,就是这样子的,当注意听说明。说明注意听说明当局部变量局部变量和全局全局变量同名的时候,同名时干什么呢?以以局部局部变量为准。
07:09
这个有一个原则哈,这个原为准,这个原则是什么呢?这个就是我们所说的编译器的就近原则及就近。就近原则就是哪个离我近,我就以哪个为准,你看这个地方运行的时候,这个N显然。在这个局部变量离我的近呢,所以说它就会使用十,我们可以运行一下,同学们,我们运行一把,你看到了这边仍然输出一个十,没有任何问题,看到没有,OK,好,我们继续往下梳理,那下面呢,还有一个关于变量作用域的问题,再一个代码块。什么叫代码块呢?就是比如说在for循环或者if或者Switch中等等哈的局部,这个局部变量就是在这个代码块,那么这个变量的作用域呢,就在该代码块里边,我举个例子。
08:05
比方说同学们看这边一一段小案例,非常的简单,你看这里。这边我写了一个,我我要标出另外一个颜色哈。啊,标示另外一个颜色标出同学们看这这么一段代码,这么一段代码里边呢,你看到没有,在这个负循环里面。在这个for循环里面,这个for循环呢,我们就称之为一个代码块,明白代码块,那么这里面是不是我定义了一个K。是不是在这个代码块里面,我定义了一个K,当然if也可以哈,那么这面这个K,这个K的作用域呢,它只能在这个for循环里边。明白这个意思吧,除了这个for循环也不能使用,你看我下面写的有,这里不能使用for中定义的K变量,也就是说这个的作用域K。K的作用域在哪里呢?在做这个代码代码块中。
09:02
好,这个我就不给大家运行了,好不好,没什么难度,就是你这个K呢,只能在for循环里面用,如果你在你在for循环外边也用不了,所以说你看我这写的这句话。对不对,说这句话了,同学们可以简单试一下,比如说呃,这样子啊,我们再写一个小案例,这个这个案例写到这吧,咱们就统一写到这,没什么关系,好不好就写这,比方说嗯,比方说我把这个for循环拿过来。我把这个负循环拿过来啊。同学们看到。我把这个for循环呢给各位拿过来,对,我把这个I哈拎到上边去。我把这个I拎到上面去,大家看一下就行了,你看在这里呢,诶在这里使用,呃,这这是我们的for循环,在这使用K呢是没有问题的,没有报错,但是呢,大家可以看到,如果我在这里使用,我就偷个懒哈。我我我把这个代码拿过来用一下就可以了,同学们看我在这里使用。我在外边去输出这个K,它立马就给我报错了,看这里他说K为定义是不是。
10:07
啊,就是这里不要使用for,至少呢,这个编译就就给你报错了,所以说我们就不要去使用就可以了,那你运行的话呢,也会出现一个呃,错误的信息,好你看直接就就报错了对不对,那你把这个去掉。把这个去掉它就OK啊,这就进去运行。对吧,这个就没问题是不是好,同学们明白这个道理就可以了啊,明白这个道理就可以了,好,我把这个注销。待会儿呢,我们再整理这个代码,这是第几个原则了呀,这是我们的第三个原则,第四,一个在所有函数外部定义的变量,我们称之为全局变量,它的作用域呢,在整个程序有效。简单的讲,简单的讲,比如说吧,同学们,比如说刚才老师在这写的这么一个变量,就是全局变量,那么这个这个N呢,就可以在整个这个程序里面都可以使用。
11:04
那通常情况下呢,我们会把这种全局变量放在一个头文件中,对,通常通常我们可以将什么呀全局变量。全局变量,变量放在哪里呢?诶放在一个头文件中,对吧,类似于这样一个形式,好这个就看你的编程习惯,就看你的编程习惯,比如说我在这里,大家看我在这个my function里面,我写了一个double money,就这个。对,那我将来想使用这个全局变量什么呢?我只要写,我只要写一个include就可以使用了,比方说大家看我,呃,这这边是个颜色啊,我前面拉一下。比方说我有一个my function,这里面呢,我定义了一个全局变量,定义了全局变量。全局变量。那么我如果想使用这个money,我只需要include这个头文件就可以使用了,就那么简单,当然了,因为你这个头文件是定义的,所以说你在include的时候呢,那你只能include一次,说这个地方需要需要同学们注意的,因为你头文件如果include两次或者多次,他会说这个money怎么样啊,被重复定义了,明白这个吗?
12:23
啊,所以说如果你你在这个头文件里面定义的话呢,你只能include一次,你include多次的话,他会认为,诶,你重复定义money里呢,所以说这一点也是需要同学们注意的好吧。好,这是我们关于变量作用域的试点说明,大家理解了吗?OK,好,那现在我把这个变量作用域的下面再给大家聊一下,哎,这个我们放到下个视频吧。好,变量作用域的基本介绍我们就说到这梳理一下。往下拉,试点也并不难,对不对?试点一说大家就明白了,走起来。变量的作用域,我们怎么给各位朋友讲解的呢?首先呢,我们说了一个基本介绍和它的四点需要大家知道的。
13:10
好,我先说的是基本介绍,然后这边呢,我们梳理了两点先。对,然后呢,我们又梳理了。后面的几点。对不对,后面的这么三点,呃两点。放到这那这边勾一下函数内部声明或者定义的就是局部变量。它的作用域呢,仅限于函数的内部理解了,那这个代码在哪里呢?我给大家整一个案例,呃,案例其实在这地方就已经有了。我就直接从这拿一样的哈,一样的这方,因为跟我们跟我们这个程序里面这个这里面写的是一样的,这边也有注释。好,我把这个题给他。板输到这块来就可以了,这是第一案例,第二个案例,第二个案例,第二个案例呢,就是它采用就近原则,就是说如果哈,就是函数内部的局部变量。
14:07
函数内部的局部变量如果与全局变量重名。如果与全局变量重名,那么会怎么样呢?会采优先使用局部变量。这个规则,这个规则的名称叫做就近原则理解。那现在呢,我把这个也给大家拿过来,比如说同学们看这里。对,我这里有一个这样的案例来说明它的使用。好,我写一下这个,你看是一个全局变量,对,然后呢,我在这个地方。我在这个地方呢,写了一个函数。大家也看到这有一个函数里面有个N,这有个N,那么我在使用的时候,对我就写使用时,那这样写到这里啊,这不写的有吗?当全局变量就以这个全局变量啊,就以这个为准。
15:04
比如说如果我在这写了这么一句话,VO,这是我们的主函数。然后呢,我在。然后我在这里调用的时候,我是F10传了一个十十进去这里。这里输出的就是十,而不是这个全局变量的20能理解好吗?好这个就过了,然后呢,第三个题,第三个题的案例是不是老师在这讲过呀,是不是这个题啊。诶,这样一目而了然,然后我把这个放到这里就可以了,并不难,这是又一个小案例,非常的简单。对吧,这里呢,我们强调一下,就是这里不能使用负循环中定义的K变量,否则会报错。把这个给同学们梳到梳理到这儿。那紧接着我们是不是还讲了第四点,就全局变量,就是什么叫全局变量的所有函数外,在所有的函数外部定义的变量就是全局的变量,那么它的作用于呢?在整个程序。
16:07
好,这个我就不再多说,好吧,这个就不再多说,同学们,这个这个概念应该是很清晰的,好,同学们,那关于变量的作用域的基本说明就给同学们聊到这里。
我来说两句