00:00
分类分为两种,第一种是系统的,我们拿过来就可以用的是吧,系统给我们已经实现好的内容已经封装好的,比如说比如说咱们讲的什么自符串处理函数是吧,讲这十几个是不是都是等着系统弄好了吧,然后来用的啊,然后是什么print,是不是这都系统弄好了吧?嗯,SC都弄好吧。还有一种就是怎么呢?就是我们用户需要解决我们自己的这个问题情况下,需要怎么样自己去创建一个什么呀,一个函数,那这个函数是用户自定义函数,这是函数的分类,有两种。那作用就是什么?作用就是使用函数可以去掉重复编写代码,降低这个这个呃,降降低重复代码率,提高写代码的速度是不是,嗯,然后让代码更加模块化啊,阅读方便阅读,然后是有利于完善和修改。比如说我在修改代码时候,是不是我找到什么,找到这个对应,你看一下找到之前那个函数定义创建的时候,比如说我在这里面要修改时候,是不是这个是一个模具啊,只要改改模具是不是就可以了,就是那个里面只要传递参数没问题是不是就可以啊,就相当于比如说你这个过年要吃五仁月饼,那你是不是得刻个模具啊,是不是啊,是是花上去这个另外花是不是你再换花,那是不是就另外一种了,是是啊,就这意思啊,就是你可以把这个函数当成不同的一个模具,是不是啊。
01:19
啊,这是函函数的这个两点作用,那我们再看一下什么,这个是啊模拟就可以模拟出公司这个样式,你自己看一下可以是怎么样,这样之后就是把这个所有东西都封过号的时候。分工明确,结构清晰,方便管理,各个部门之间还可以相互协调,就是你想怎么调用就怎么调用,是不是这些都要啊,然后格式,格式咱们自己,咱们这个是不是也写了在这里面,呃,不是在另外一个里面,是不是写了返回值类型,函数名形式,参数列表,然后是代码,然后是返回值,这构成了整个的一个函数。然后这里面对具体每一个也分析了,这是函数的这个函数值类型是什么,什么类型函数的名称,然后是函数的这个参数列表是不是也有啊啊,然后这里面具体代码,然后这里面是什么,是这个函数的反问值类型也有,那这里面介绍的什么函数名,行参函数体和这个反问值,那函数名就是什么,就是建明之意,是不是起这个名字。
02:12
能和系统叫一样有名吗?比如说我叫能行吗?谁说的?行不行不行是吧,那来测试一下,来来来啊,可以的啊,可以叫P,但是一般情况下你要在你的文件中如果使用什么,使用自己的print,那就是怎么做自己操作,是不是,那你就不能用系统的了,知道吧?啊可以用和系统相同的名字啊,这里面没有具体的规定啊看一下16。函数名叫函数名吧,这个做一个简单测试啊,井号一。这里面写函数啊,写一个是Y,呃,Y类型的PF。然后扣扣起来。然后写个int类型的A。普F是普F系统是不是这个in的类型的,这个是B。
03:05
然后是呃。啊,没有分号是吧,如果是这个Y类型的情况下,没有这个反分值是不是啊。那这我们主要看这个名啊,这个这样创建是不是就可以了。PTF括号括起来啊,除一个十,逗号20,那我们调用的情况是哪个?诶怎么系统的不是吧,右击,然后这里面有什么转到看一下啊,比如说你这还有一点需要注意的,就是之前忘跟大家说了,就是在这个VS里面。对四次运算,比如说这是你的这个函数啊,是不是你写的时候可能怎么样,不知道写在哪啊,是不是你在这里面右击转到。定义转到哪了,是不是下面了吧,你看这里面还有右击转向声明,右击转到。声明是不是转到上面去了,这里面这个是不是声明啊,小明刚才说了吧,定义是不是在下面啊,这里面在这个什么,选择这个函数之后,右击选择这个转到定义,转到声明这两点啊,一个是F12,一个是CTRL f12,但一般情况下这个声明怎么的会没有知道吧,比如说在这里面没没写声明,把这函数这个实现直接拿到上面来,就把定义拿到上面去了,你这里面怎么转都转一个地儿,知道了吧,啊,明白了吧。
04:16
韩树明,那你看这里面右击,比如说转到什么,转到这个声明和定义是一个地儿啊定义诶怎么转到系统里面来了呢,不给面子。那我们看能不能运行吧,这程序啊。改一下,这叫什么十几啊15。调试开始执行。怎么报错呢?重复定义。重复定义。他就成。我我记得是可以的,对对对,我把这通文件去掉啊,把通文件去掉,把这这这几个没有用通文件去掉啊,都去掉吧。那人不没意思。
05:01
怎么怎么应该也不行零啊,我试一下,同学说不行,我试一下调试开始执行。System。没不用投文件也行,我这里。我这里面没有调用任何其他这个函数,看到了吧,调试开始执行。怎么还报错呢?这个正常情况下可以的啊,绝对可以啊,我们在创新创建一个文件,我就不信了,是不是因为在之前的函数里面,咱们调用过这个名字不行啊,你比如说我在新建项目啊,别着急。这个问题要演示出来啊是。K0几零七的吧,好像有个零七的没事,407吧。杠什么一杠?下一步,我。右击原文件,添加一个新项,然后这里面这个是test。
06:01
Test,然后是零一.c。什么不导入啊,把那代码复制一下啊。Ctrl a ctrl c,然后拿过来。然后把这句话给他,这个是删掉,这里面不导致系统文件啊,你看一下调试开始执行。什么也不打印,因为我这里面没有打印任何东西,是不是这里面只是做一个函数调用过程,是不是普特福这里面虽然系系统调用的,但是可以用的,你可以自己创建知道吧,那这个你讲到什么,讲到这个C加之后,你可能就知道另外一件事,有个叫封装继承和什么波肽是不是,那这个就其中一种啊,你先不要了解太多啊,就是你现在知道怎么的,就是我现在这个名字,函数的名字是可以跟系统是怎么样重名的吧?啊但是比如说我要用系统这功能情况下,可能就怎么调到我这自己这里面来了知道吧,啊这是这个问题啊,把这关了啊。啊,这个名字可以的,那那我们继续看一下函数的什么呀,函数的这个形行参列表,行参列表就怎么括号括起来那一块吧,啊可以有一个数据,可以多个数据,中间用什么,中间用这个是逗号分隔,而且你不能给行参怎么着赋值,直接赋值是不是不行啊。
07:10
这里面只是初始化一个变量而已啊,不能直接赋值,赋值错的。给我气的打嗝了。好,那再看一下这里面什么,这里面是这个是在函数定义,呃,在函数,在定义函数时指向行三必须是类型,加上这个变量形式就是类型再加上变量的形式才可以知道吧,你不可能只有类型,也可能也不能只有这个什么,只有这个是一个变量啊,这两这两种都是不行的啊,那这两种都是不行的,你需要注意一下,但是好像在这个。其他语言中可以的吧,比如Java这种方式就行,是不是?有同学做Java吗?忙。建超可以吗?可我可以就做一吧,我只是呃,没没有啥其他的意思啊,你也别害怕,这种方式在其他语言中可以啊,但是在这个C语言中,它就这样不行的,知道吧,那可能其他语言可能就进化了一波,是不是C语言这一波就没跟上啊,这种方式不行啊,你注意一下就行啊。
08:08
然后是没有参数啊,括号内为空,这样是可以的,这是咱们下面要讲的三种方式,是无参函数和这个是有参函数,以及这个是呃三种怎么说呢?有餐。有三无反,有反无三无,三无反是不是三种啊,这后面一会儿大家给大家讲这个问题啊,然后。啊,一会儿再跟大家说,你别着急啊,然后括号括起来称为这个函数体或代码体里面用来做这个功能实践的啊,没问题,返回值,返回值要和什么呀,反就是函数的数据类,返回数据类型要对应上啊,你看这里面要对应的上啊。啊,当然你不匹配也可以啊,只是这里面没有硬性的规定啊。你看这里面说了说,如果函数的返回值类return啊表和语句中,呃,就是返回值和return语句中表达的不一致,而且类型无法转换,你的程序会报错知道吧,但一般情况下都能自动转换,知道吧,而且默认它会把你这个数据类型转成int类型,这个大家知道一点啊。
09:05
然后然后在这里面怎么呢?是return语句,另外一个作用是怎么呢?可以中断程序,咱们前面不跟大家说了嘛,是不是,那在主函数中中断程序,还有另外一个叫什么呢?叫一呃面函数,慢函数以及这个什么呀。Excel函数,这个函数做什么操作呢?看一下啊,是终止程序的是吧?可以在什么子函数中调用去终止程序,那如果在主函数中调用,它俩是怎么样,是相同结果的知道吧?啊只有在此函数中有区别,那这边也跟大家讲了。然后这块就是函数的这个整体的样式访问值啊,包括它的过程啊,这里面是什么,是它的函数的执行流程,就是如果说调调什么,调到这个就是函数调用的时候会进到一个其他函数中,是不是它执行过程,以及它的这个变量创建,咱们这里面已经说了吧,啊,从从主函数从上到下执行,如果创建变量情况下,在内存中创建,如果是函数情况下,它会在这里面创建一个函数,函数情况下这也会创建变量,当函数结束的时候,它会把这些变量销毁,然后再回到这里面来继续执行啊,这是它的一个过程啊。
10:10
然后这是函数的十仓星三,那我们把这话读一遍啊,这里面这个话很重点啊,其实已经给大家讲过了啊,咱们刚才已经讲过了,看一下。形参出现在函数什么中啊?哪个是定义啊,实现了吗?言实现了吗?定义是实现吗?啊,定义不是实现吗?定义难道不是实现吗?是啊,就是功能实现吗?就是定义嘛,是吧。在整个函数内部看一下,是在整个函数内部都可以使用,就是这个行参出现那个变量可以在整个函数内部使用,离开了该函数怎么就不能使用了,是不是啊?就像我们举的最后,呃,不是这个之前这个例子啊,是不是?这是什么?这是形参在哪啊?函数定义中使用的吧,是不是啊,离开它就没有用了是不是啊?这个问题你如果看不懂情况,你自己多研究研究,多问问其他人啊,这块如果搞不懂情况,后面你就全懵逼了,知道吧?嗯,你就没必要继续往下学了,嗯。
11:10
然后十参出现在主调函数中,就是怎么样,就是我想调那函数,这里面需要传递什么十参是不是啊,前面给大家举例了这个例子,你再自己看一下啊,记住贝塔函数中13也不能怎么样使用,是不是?比如说我在这里面改变的值只能是对这个有用,对这有用吗?没有用是不是啊,进入到这个被调函数中,这个改变这个值不影响什么,13的值吧,嗯,好。第二点看第三点。十参变量对行参变量的反呃的数据传递方式是什么?是直传递及单向传递,由十参传递给行参,而不能由形参再传递给十参,是不是啊,这一种叫什么值传递,但是还有一种叫什么地址传递,比如说我们数组那就是什么传递啊,地址传递那里面就可以改变值了,咱们后面要讲的内容啊,你这个你可以辩证去看一下这个问题啊,咱们后边会讲啊。
12:05
下一问题,在调用函数时。系呃,编译系统给行参分配存储单元,调用结束后行参单元会被释放掉,明白啥意思吗?明白是不是就画这图这个过程啊啊,这个就是什么,这个传递过程就是什么传递啊。这个就是直传递,诶传递不是sorry啊,我好像弄错了啊弄这个。这个是地址传递,这个值会被保留,这个是什么?这个下面这个是传递。直传的这个结果不会被保留,咱们后面会有这个具体的这个例子,呃,不是讲课的时候就会给大家具体去说了啊,所以说这块你先辩证一下,看看这个问题啊。好,那然后这是什么?是到这了,十参单元与行三单元是不同的单元,是不是咱们前面说过吧,那调用结束之后,行参会被释放掉,然后函数调用结束返回到主要中,则不能再使用该型参变量了,知道吧,它在内存中已经消失了。
13:06
13单元仍保留原来的值,就是咱们也是咱们这个例子里面的东西啊,是原来还保留原来的值是不是啊。因此,在执行一个。被调,被调用函数时,行参的值如果发生改变,不会影响,呃,不会改变主调函数中十参的值,这就你把这句话先读一遍,我给大家几分钟时间读一遍函数的这个参数和这个行参13具体的操作,那这里面咱们再来个例子啊,是。接着他们来的是这个是17。叫函数样式吧,或者叫叫样式。谁?型号一。那我们这里面分为三个啊,这三个其实也很容易理解啊。斜杠星斜杠斜杠星星斜杠是吧。
14:01
第一个叫。有他。哎,这怎么一个也打不对了,有餐无返。返回值是哪个反是三啊,第一个是有参数反就是有参数,你知道哪个参数吗?啊,前面参数无返回值就是一个什么word类型,Return,前面不用return,后面不用加值是不是,然后是。有餐。有法。那这个咱们之前应该也也基本上这些例子都演示过了吧,还有应该是第三个,第三个就是没跟大家说过,就是这个是午餐。无餐,哎呀。无法。就是没有参数,也没有反应值,但它也是一个什么,也是一个函数,是不是只有一个什么,只有一个函数名存在表是不是,嗯,那我看一下啊,是什么样的格式,根据这三个我们去做一下啊,第一个做一个叫有参无反的,就相当于什么,相当于这个是咱们刚才讲的是Y的类型是什么呀。
15:04
访问值是不是没有访问值,那这里面对应的是什么?对应的是。是方框是零二啊,有零一了,你就不能再写零一了,在其他文件用零一知道吧,比如这里面写什么,写个int类型的A,逗号int类型的B,这是不是参数啊,那我要做的操作是什么?做的操作是这个是。Int类型的C等于A加B。完事了,数写完了,那我们调用一下是半个零二,这里面是什么是。十。逗号。20。这里面因为没有访问值,所以说不用接收是不是,那我们可以在这里面去打印个纸嘛,打印个30是不是啊。百分号D,斜杠N,然后是逗号一个C的值,那是不是能打出30啊啊能打出三值,这第一个例子啊,是这个是呃,有参无反,就是我不需要接受这个值,这个值可能是直接做一些什么,直接做一些这个打印操作是不是就可以啊,包括咱们讲什么讲的第第一个的时候讲哪个讲这个是呃,Bo爸这个时候怎么呢?是八宝不是Bo爸啊是八宝讲八爸的时候,这里面是不是这个avoid,这里面对应的是不是也没有这个百分值啊嗯,因为这是什么,这应该是这个是地址传递啊,不用接收返回值的情况下,它也能改变这个数值啊,这个我们这个是呃,Y对应这个return,那你看一下可以写也可以不写,知道了吧?啊或者是我们写个return nu,这样也行,看到了吧,啊,但是一般情况下大家就是都写个return,这样代表结束了是不是啊,没有任何的值,这是。
16:45
第一种有参无反的,那我们再来个第二种啊,是Y的,呃,这就不是Y的,是有返回值了吧,有返回值就是一个具体的值,那比如说是个in的类型,是不是一个反回值类型啊,或者是一个是呃差类型是不是也可以啊,或者是一个什么是一个int星类型啊,为啥是个int星类型不是一个int类型的这样数组呢?因为它俩是一样的,知道吧啊后面咱们讲出再说,比如这里面返回int类型是function身呢,是零三括括起来int类型的A逗号int类型的。
17:17
B。Ren。然后是。A加B啊,当然我们也可以像之前一样,定一个in类型的C等于A加B,然后这里面返回什么,返回一个。C也可以,那这里面是不是一个具体值了,我需要接收它了吧?啊,接收它的情况下得需要怎么查,是int类型的C等于FUNCTION0,三,然后是十逗号20,这是不是一个实际的值啊,那这是13啊,这是我们第二种方式,还有什么,还有我们这个第三,那我可以打一下什么,打一下这个是C的值。百分号。B,然后斜杠N逗号一个C,那无参,呃是无三无反,那是第三种,就是我们看一下Y的这里面是不是没没有反应值啊,那起个名叫FUNCTION04,然后括号括起来也没有什么。
18:10
也没有这个参数,那一般情况下用这种做啥操作呢?比如说做一些,比如说像看分隔符啊,是不是PR。Intf,我我比如说界面中要做很多分隔符,什么样分隔符呢?杠杠杠杠杠斜杠一个N是不是啊,那我就可以用方式四来操作是吧?那比如说在我们这程序中多加两个是。FUNCTION4然括号括起来,是不是不是后面什么也不用加,那这里面也是一行代码执行完成之后再来什么,再来一个是FUNCTION04,然后括号括起来啊,这里面执行完之后再来一个什么。304。来看一下结果啊,调试开始执行都有哈。啊,看一下这里面是打印出杠杠,这都是谁打印出来的,零四就是无餐无返给我们做的操作,一般情况下就是怎么做一些隔花处理啊,或者做一些这个。
19:08
反正是不影响你整个程序运行的一块东西,是不是全给你拿这里面做,比如这里面我打印三行是不是,如果写的情况下,怎么的,得把这这些代码复制多少行,复制三行嘛,是不是如果写一函数情况,是不是我只要调用就行了,只要调用就行了啊,当然如果这里面代码量比较多的情况下,是不是那我就可以很省事了,是不是,嗯,很事了,就这样操作啊,那是第一个,那第二个就是什么,第二个就是我们的有参无返,只有什么只有这个参数没有什么,没有这个对应的这个是返回值,那我这里面做操作是不是可以在这里面直接打印的返回值里面什么也不用加,那是不是也能打印出这个值位多少啊。30那这个是什么?有三有返是我们这个是哪种啊,是零三吧啊0303做的什么操作是呃,传递过去两个值,有一个返回值,这个返回值是接受它,那注意下这个问题再给大家看一下啊,这个需要注意的一个问题,什么问题啊,就是我在这里面定义了什么啊。
20:01
C是一个什么啊?是一个临时变量是不是啊,它也会在什么里面结束啊?Return就是这里面把这个反应值返回回去之后怎么着结束它也会被干掉,但是它携带这个值呢?如果说这里面有人接受它,就将这个值赋值给一个其他的变量,是不是?如果没有人接受它,这里面如果不接受可不可以啊?可以啊,但是这个又不能怎么的,不能打印了,但我们程序照常能运行啊,看一下。老师开始讲。这没有问题啊,那怎么的,这里面如果没有接入这个值,那它这个值就被系统自动怎么的干掉了啊,包括什么,包括这个C里面的这个值也会对应的内存是不是也干掉了,那只要有人接受它的时候,才把那个就是相当于从计算器中拿出来给它放进去,是不是如果没有情况下,怎么直接在内存中就干掉了,知道吧,这是怎么,这是啊,这个是,这是在函数内部中创建什么变量,是不是这个意思啊啊对应的这个值啊,我们看一下啊。弄个人接受它int类型的C,我特意写个C就怎么的,就是这个是一个独呃单独变量吧,这是不是也单独变量,不是将它传递给它,也不是跟他地址也没有任何关系,只只是把那个什么呀,只是把那个值给了另外一个变量而已啊,他俩没有任何联系,那这里面叫什么叫这个其他名是不行啊,比如说叫这什么叫。
21:18
是不是也行啊,嗯,是不是啊,是不是也行啊,没有任何的义啊,但是那个传递过程之后,它是指把值传递过来,没有把它对应的那个变量传递过来,明白吧?啊,这是这个传递过程,这是我们讲的三种函数的样式,能保存一下啊这。
我来说两句