00:01
同学们,我们再来给大家讲一个与函数指针相关的一个。一个知识点叫。回调函数,这个回调函数呢,理解起来,呃,就一定要在理解了函数指针的这个基础上来理解。首先我们看一下什么叫回调函数,所以回调函数指的是函数指针变量,就这个函数指针变量呢,可以作为某个函数的参数来使用,什么意思你们听出来了吗?也就是说我们有一个函数,这个函数可以接收函数指针。B理解这意思吧,就是它这个形态呢,这个类型是函数指针。那么回调函数就是一个通过函数指针调用的函数,我们称之为回调。简单的讲呢,回调函数就是由别人的函数。就是说回调函数是由别人的函数执行的时候,执行的时候。
01:00
调用你传入的这个函数,当然这里面是通过什么呢?通过函数指针来完成的。对,我加一个就通过通过函数指针完成。好,这个说起来有点有点抽象,有点抽象,那我们也不说废话了,直接给大家举个例子,大家看一下就一目了然。现在呢,要求大家使用回调函数的方式给一个整形数组,给一个整形数组负十个随机数。明白这个意思吧,就说我先前有一个数组十有十有一个数组,它的元有十个元素,但是呢,这十个元素没有赋值,我希望呢,能够用回调方法给他付十个随机数,那大家来看,我们来看一看这个代码号。我给大家这边讲一讲。这个代码呢,其实一点都不难,一点都不难,大家一听就明白了。好,我给大家来走一个代码。
02:00
好,那现在呢,我们先写一个叫回调函数,回调呢一般叫call back啊回调call back方式。好吧,我们也取这个名字,Call back方式。那么我们把这个代码呢,先拿过来,好代码拿过来,老师呢就开始来讲了,看看它是怎么完成的。首先我们还得引一个呃,Include,一个头文件STDIO。没问题,好,我们一步步的讲,首先大家看这里这个地方,我们我们是不是定义了一个数组和一个。这个能看懂吧,但是此时此刻这个myra呢,是没有付出值的,也就是他这里面全是垃圾值,然后大家看这里。大家看这里,我这里调用了一个in。对,我这里说明一下,说明第一点我们调用了,调用了什么呢?调用了init这个函数。
03:02
这个函数。这是一个函数,我们怎么调的呢?大家看我把这个R。D我把这个数组传给他了,第一个参数,第一个参数是数组,那这边的类型你看。它是一个int I的类型,所以它就是个指针,我把这个数组传给它没问题。十代表我数组有十个元素,最关键的地方是在这里,这句话我要多说一下。这里大家注意观察,我在这个地方传入了一个这个这个是什么呀,这个地方我传入了。传入了一个函数名。函函数名它那么我们前面讲过,函数名其实它的本质呢,就是一个地址。D,它就是一个地址,而且这种呢必须使用函数指针来接收,需要什么呢?需要使用函数指针接收。
04:03
是不是也也就是说它的这个指针类型呢,是函数指针才能够接收的。你别的指针是接受不了的。我们看是不是呢?诶我们发现的确你看这里。同学们看这句话能看懂什么意思吗?大家看这里,你们看前面两个,我不介绍了,这个你能看懂是什么吗?同学们能看懂这是什么东西吗?能,能看懂吗?这个是不是。这这个就这个是,如果你看懂的话,这个F就是什么呢?就是一个函数指针。它是不是一个,是不是一个函数指针呢。那么他能接收的他。注意看啊,它可以。它可以接收的函数是什么呢?是返回一个int,没有,没有什么,没有行参的这种函数,没有形参的这种函数。是不是他可以接受的函数是这样的一种函数啊,是怎样的一种函数呢?就刚才老师说的,返回的是一个int。
05:08
返回的是一个int,没有行参的这种函数,为什么你看。这个是它指向的函数的那个返回值是硬的long VO的代表没有行参。对不对,所以说你看我这个get next random value呢就可以用,因为我这个函数大家看是不是就是一个返回了一个int,而且没有行参。而在这里面我调用了RA,这个RA是哪个呢?这个RA是一个函数系统函数。系统函数会会返回,返回一个随机数。随机的整数啊,随机。随机整数,好就这样子的,所以大家就能看懂了吧,现在能看懂,好回到这边我们看他做了一件什么事情呢?大家看这里,他在这里循环了十次。
06:02
是不是它循环了十次啊。它循环实质干什么呢?因为你这个size是什么,它循环实质的作用是在这里,它调用了我们这一个行这地方啊,注意这里它调用了通过注意次通过我们的函数指针。函数。函数指针调用了什么呢?调用了。这个get likes的。Random。这个函数。那有些同学不对呀,原先不是这样写的吗?是一个星号包起来。可以的,这两种方式其实都可以。也就是说你你可以,呃,像原先老师这样写的,用一个新F包起来再调用,你也可以这样调用。这样调用也是可以的,更简单说,老师你前面不是没没有讲这个,我给他补讲一下。大家看是不在前面我们举这个案例的时候,是不是我们在调的时候是这样调用的呀,是小括号调起来,其实呢,也可以这样调用啊,还有一个调用形式。
07:12
调用形式调用方式二更简单,也可以这样叫p max。XY也是可以的,也也就是说你这样调也是可以的,把这个去掉。你会发现这样呢,完全一样,我给大家试一下好不好?我给他试一下跑,诶,那我得把钱,我把这个钱注销一下啊,已经注销了,我们跑一个,现在呢,我用的是这种方式调用啊,直接用我们的函函数指针这个变量名称去调的也是可以的。好,我给他输一个30,再输一个99回车是不是一样的,同学们一样的没问题吧,诶所以说我再补了一个调用方式二也是可以的,好吧,我还把它撤回去好吗?就是。我们还把它撤回我们原先第一种方式调用的,两种方式你都可以随便选,那这里呢,我就用的是第二种方式了,用的是什么方式来调用呢?用的是F小括号,那调这个,哎,同学们,F小括号是不是本质就是调get next random value,那么调它是不是就会返回一个随机整数,返回到这再付给我们这个O啊。
08:21
是不是这个代码就写完了,好写完过后呢,这个地方我就输出了,输出这个处理后的处理啊,就是负值后的什么样数组A数组,这就完事了,这代码也就是说我们说的回调函数在哪里体现呢?这个就是回调函数。F就可以认为是一个,它在这里充当了回调函数的角色。注意听。Apple。F。是一个函数指针,它接收的一个函数啊,F在这里,在这里被哪个调用呢?被我们的ni ni调用。
09:04
二调用。是不是充当了充当了回调函数的角色?这样就理解了吗?好难不难,其实一点都不难,对不对,如果说你说老师我这有点听不懂啊,呃,听不懂你应该没没这个可能性啊,不是很难,那说老师这个地方怎么没小框,你可以扩一下,其实因为这里面只有一句话,我们可以不扩啊,扩上也是OK的。好,同学们,现在我们运行一下,看看效果怎么样吧,我先把这个注销。我们看看代码能不能跑起来好吗,运行。跑一下。好,运行起来,我们看一下对不对。好,我们可以看到完全是OK的,看到没有。没问题吧,十个啊,十个十个数,所以说它是在这里呢,呃,调用,因为这边都是地址喽,大家看这个也是地址,这个也是地址,所以说你在这个地方对A进行操作,其本质就是修改的。
10:06
Main函数里面的MY这个我就不再讲了吧,讲了好多遍了,而我们这边呢,传了一个函数零给到这一个函数指,呃,给到这个函数指针,它也通过F来调用,通过这个函数指针调用,它就这个就是一个回调的现象。回调的现象老师就讲这些了啊,你要是再不明白的话,自己画画图吧,好吗?好,同学们,那关于回调函数老师就讲这些,大家好好的理解一下。来放这儿,回调函数就说完了,那回调函数我们怎么讲的呢?非常简单,我们讲了一个基本介绍,然后直接算案例了,其实就是。把函数指针用了一下。放这儿。基本介绍。好,这边有两点我梳理到这。哪两点说一下。当然,这有应用实例。
11:00
这应用实例回调方式好,这边呢,代码给大家跑过来,代码演示,代码演示。各位,我把代码呢给大家放到这边来。叫call back方式,能看懂哈。能看懂。好,同学们,我就放到这里了,好好的理解一下吧,并不是很难的,那各位同学关于回调函数,老师就给大家讲解到这里。
我来说两句