现在我们讲一下函数的参数,函数的参数从定义阶段和调用阶段区分,可以分为两部分,定义函数阶段的参数,我们叫形式参数, 简称行餐。比如我定一个 func xy 子弹呢,我就 pass 掉了,这个 x 和外就称之为行餐。而调用函数阶段传入的纸,我们叫实际参数,简称时餐。 比如我这里调用 fuc 传一个六和八进去,这个六和八就称之为时餐。最终我们这个六是要复制给 x 的,也就是 x 等于六,然后八要复制给 y, 也就是 y 等于八。所以行餐其实就相当于变量名, 时餐就相当于变量值。时餐和行餐在定义阶段是没有任何关系的,只有在调用阶段,时餐才会绑定给行餐,也就是变量值绑定给变量名。这里强调一下,我们任何时候都应该记住,说变量值复制给变量名是不准确的,准确的说应该是变量值的内存 绑定给了变量名。那绑定了之后有什么用呢?注意了,只能在函数内部使用,函数外不是用不到的,假如我想在外面打印一下,一个时候外是会直接报错的。说内部 ml, 内部 x 没有定义,因为只有在调用函数的时候才会创建内存空间,把字存进去,也就是把十三存进去,然后把内存地址绑定给变量名, 也就是绑定给整理的行餐。当函数调应完之后,这个绑定关系会自动接触,所以我们后面再想用这个 xoy 是用不了的。好,这是死餐和行餐的关系。现在我把这个调应的方式改一下,我在前面写一个 a 等于六,然后把这个死餐六换成 a, 这样能明白吧?一样的嘛。这是我换成了变量的形式, 前面我们定义了一个 a 等于六,然后这里我写个 a, 是不是就相当于写了一个六?现在我把这个八也换掉,我定一个 b 等于八,然后这里换成 b, 我们这样改了之后,就相当于把变量 a 的值六换成了十三, 传给了行餐 x, 然后把变量 b 的纸八当成了时餐,转给了行餐外。当然我们也可以在这里放一个任意功能,只要这个功能最终能得到一个值,我们都可以放在这。比如硬着一个字转十,或者其他你自己写的一些功能, 最终他的这个返回词都会被当做时餐传给 abunc。 这一点其实我们前面讲返回词的时候也讲过,我就不再啰嗦了。
粉丝5.3万获赞37.8万

大家好,我是小林,今天这课讲一下数组名做实餐,指针变量做行餐。直接看下小林小这个 demo。 第九行是个自定义函数,参数是一个指针变量 point 函数题,直接打印这个指针变量,他没有返回任何值。看一下主函数里边的第六行是个整形数组,第六行就是这个自定义函数的调用了,括号里边写的是数组名。 在之前的章节中,小林已经讲了如果只写数组名,他代表数组守元素的地址,如果你传的是数组名,也就是地址的时候,行餐也应该是地址。看一下变现结果 可以看到会输出一把 v 一的地址传给了指针变量,然后输出指针变量所指向的对象,也就是一学会的小伙伴,可以给小林点个赞,好,下课。

今天这节课总结下结构体指针。在 c 元中,结构体变量和结构体指针变量都可以做函数参数。当用结构体变量的成员做参数时,用法和普通变量做参数是一样的,属于直传递方式。需要注意的是,食餐和行餐的类型应该一样。 用结构体变量做实餐时,采用的同样是直传递方式,只不过是将结构体变量所占的内存单元按顺序传递给形残。这里的形残也要是同类型的结构体变量。 如果用指向结构体边上的指针做实餐,是将结构体边上的地址传递给行餐。学会的小伙伴可以给小林点个赞,好下课!

大家好,咱们这节视频呢,给大家介绍一下这个船指调用的经典的这个题型啊,叫做通过函数呢,交换两个变量的值。 这块呢,要注意咱们说的是两个变量的值,那么这两个变量的类型呢?咱们是没有明确说的哎,这两变量可能是印的型的,可能是印的星型的,可能是二级指针,可能三级指针,可能数足指针,哎,不管他是什么东西哎,注意他就是两个变量, 我们通过函数呢去交换这两个变量的值啊。那么这个船只钓用的核心的这个思路呢?有这么两个不能叫核心思路啊,就是他的关键点啊。 第一个关键点呢,就是我们呢要通过函数修改哪个变量,那么这个函数调用时的这个时餐呢?就直接哎传递那个变量的地址哎,这是第一步,我们一下就确定时餐了 啊。那第二步呢,然后根据传递的实际的这个地址类型,也就是我们传递的这个食餐,那么这个食餐的类地址,这就是个地址对吧?那么这个地址是什么类型的呢?此时呢,我们去确定行餐 哎,一定要注意这两步,你不要呢先去确定型材,型材搞个地址就放在那了对吧?哎,我们这个呢,先确定这个型材哎,型材很好确定,你修改哪个变量,你就直接传那个变量的地址,如果这个变量 a 呢,是印的型的 哎,就印的 a 这个变量,那么我们对应的这个行餐的地址类型呢?那就是印的星形的对吧?哎,这块用一级指针接就可以了。 如果说我这个变量 a, 他是一个哎,这个这个指针变量印的星形的。哎,那么我们传递的这个取缔指 a 呢,他到这来呢,到 这个型材料什么哎,他就是二级指针了,印的星型了。因为一级地址。呃,一级这个这个指针的变量啊,地址呢,就是二级指针类型 对吧?哎,所以此时呢,我这个行餐呢,就是印的星星了。所以这块呢,一定要注意,他传递的是我们那个变量的地址啊,你不要说是传递个地址,就就就是就就,就是船只调用,那是不对的。哎,所以一定要注意这两个关键点啊。 好,那知识点呢?就是呃,这块利用的这个这个指针啊。第一条它的操作原则呢,就是一个 指针变量装了一个变量的地址,那么星加上这个指针,变量就是这个。呃,这个指向的这个变量本身什么意思呢?比如说你定义了一个 in 星 p 啊,上面呢,又定义了一个 in 的 a 啊,一个普通的这个整形变量 a, 那么 p 呢,是装着我们这个 a 的地址的对吧?哎, p 呢,就装着这个地址,那么星 p 就是我去操作这个指针的时候,星 p 呢,就等于变量 a 本身。 哎,一定要注意啊,这就是我们指针的操作最核心的一个原则。很多小伙子不会操作指针,就是因为你不知道这个原则,或者说没有人告诉你这一条原则有多么的重要。他呢是指针操作的核心 啊,不会这条原则,你或者说你脑子里没有这条原则指针,你就是完全操作不了的。哎,你看星批就跟我们这个 a 联系上了,哎,他俩是一模一样的 啊。好,这是呃,这个啊好。然后将紧接着呢看一下我们这个代码。代码的话呢,我们从主函数开始看哈。那主函数中呢,我定义了 a b 两个变量,这是个普通的变量对吧? 然后这个 pro 呢,输出一下我们这个指针啊,变这个这个变量变化之前的值一个二一个三。然后紧接着呢,我们通过这个交换这个函数呢,要去交换他俩的值对吧?那交换的话呢,我们传递的是什么? 哎,你都不用去先看你都不用先看你这个函数原形是什么啊?直接这块呢,就传递取地址 a 和取地址 b 哎,因为你交换的是 a 和 b, 要通过函数呢去改变 a 和 b 的值。好,那我这块呢,一定传递取地址 a 这块一定传递取地址 b。 这个呢,是固定的 来吧,没有别的写法。不叫不叫没有别的写法哈,就是你要是想通过函数呢去实现这个功能,你这块呢,就这么去传实餐就是这玩意啊。那我这个 a 呢, w 的或者是星的,不管是什么无所谓哎,他就是个变量,你就传这个变量的地址, 记住这个啊。好,那我这块呢,传递了这两个变量的地址,那么这个地址是什么类型的哎, in 的变量 a 的地址呢,就是 in 星形的。所以呢,我这块用一个 in 星的指针去接 对吧?那 b 呢,是 int 类型的。那我这个取地址 b 呢?哎,它就是 in 星星的地址对吧?所以呢,我用这个呃变量 pb 呢,去接着这个地址 对吧?形容 pb 介绍这个地址有问题吗?没有任何问题对吧?你看,这都是固定的啊。他说很多小伙不理解这玩意呢,这这个他就是对于这个东西呢啊,不太理解啊。 好。然后紧接着我们这块呢,输出一下交换后的值啊。那我们看一下,在这个呃交换函数内部呢,实现了这么一个交换的呃,代码对吧?没有别的。首先呢,定一个中间边角 c 来记录着我们这个,你看啊 啊啊, pa 装着我们 a 的地址对吧?那么星 pa 就是我这个 a 变量本身对吧?你看,这个原则在这写呢,所以你这块操作星 pa 就是操作我们这个 a 本身对吧?哎,那么我这个呃 星 p a 比深,那星 p b 呢? p b b p b 装着 b 的地址,那星 p b 呢?就是我这个变量 b 的本身这块呢,就是 b 对吧?然后呢, b 再复制给 c。 哎,这这就是我们指针操作啊。呃,非非常的简单,你记住这个原,这个原则你你非常熟悉之后,你这个指针的操作就没有错误的,那个 他就不会有错误了。明白吧,就就就就是你想出错,他他他他他都出不了。你任何出错呢,他都会违背这个,你只要违背了这个原则,那这个就就就出错了。对, 这不能叫原则,这叫规则啊,指针操作的规则啊。好,那这块呢,就相当于 a a b b。 然后呢,把 c 复过来。哎,这就是这个交换的呃,逻辑了对吧?那交换的话呢啊,首先呢,定义的就是这个 呃,变量 c c 装着 a 的值, a 的值呢,就是二,对吧?然后紧接着呢,把 b 的值呢去复制给 a, 那 b 的值呢?是三,所以呢, a 变成了三。然后再紧接着呢,把这个 c 的值呢复制给 b 啊, c 的值装着我 a 刚才的二,所以呢, 哎,二呢,就复制给 b, 那么呃, a b 的值呢?就进行了一个交换啊。那如果说是没有中间这个变量呢?你直接进行这么复制就不可以了对吧?咱们前面也说了,你把这个呃,比如说先执行这个吧, b 的值复制给 a 之后,那么 a 里边的这个二就丢了对吧?你没有这个提前 记录着 a 的这个之前的值,那么你这个重新复制之后, a 在这个里边原来的值就丢了。所以说,必须要定一个呃,提前的这么一个变量,哎,他要去记录一下啊。好,这就是这个代码,咱们带着大家呢去写一下,增加一下印象啊, 这应该是四十三了吧。对,四十三。 好。我们呢把这个主函数拷贝过来啊。啊,到这里边来。我们首先呢定义我们的这个函数 y 的, 就叫这个名吧,对吧?啊。那么首先呢,我们在主函数里先去写啊,定义这个 a, 复制个二, b 复制一个三普顺的 f, 输出一下之前的值,百分之 d 对吧?百分之 d 杠人 a b。 好。然后呢,我们再拷贝一下啊,这就是输出的后面的值。好,在这块呢,我们去调用这个 swift 函数,要进行这个交换。只要是哎, so s s 啊,只要是交换,我这块一定是传递取 d 者 a 取 地址币就完事。你只要记住这个就完事了。哎,实实餐什么都不用考虑。哎,我就就就就就写这玩意啊。然后呢,那么我们对应的这个函数这块呢?那肯定就是你传递的是取地址 a h int 类型的。所以说这块呢,肯定是 int 形形的对吧?然后同顶着后面这个呢,就是 pb 好,然后进到里边定一个中间变量 c, 记录着星 p a 啊。然后呢,星 p a 呢,复制上星 p b 啊, 然后呢,星 p b 复制上我们刚才的 c。 哎,你看这玩意啊,这这就相当于流水账啊。这就是我们。呃,初中写作文的老师说我们的流水账,这玩意就是流水账,你给记下来啊,这要背下来好,看下这个结果 说你,你还这么慢。好,你看这个原来是二三,后来变成三二了对吧。那么还有这个,呃,很多的这个 资料里边呢,会给大家演示。我们这块呢,传递 p a p b 的时候,为什么没有实现交换对吧?那这个是为什么呀? 哎,那就是因为呢,我们 p a p b 啊。那 a 呢,是一个变量对吧?他有一块空间,装着二,那 b 是一个变量,他有一块空间呢,装着三。那么我们这个型残的定义的这个变量呢,他是我们这个函数内部的局部变量。所以说 p a 呢,有一块空间对吧? 啊,也是印的类型吗?那么我们这个实残到行残的这个传递呢,它是一个初始化的过程,就相当于定义了一个 pa。 然后呢,哎,把这个 a 的值呢给他。 呃,就是把 a 的值呢,给它复制过来了啊。但是如果传递的时候不加这个取地址符啊,不加取地址符,把 a 的值传递过来,那 p 里边装的时间就是二,那 p b 里边这个这块空间呢,装的就是三。 然后呢,在这个函数内部呢,对 p a p b 呢进行了一个交换,那实际交换的是什么?交换的是这两块空间,对我们外部呢,没有任何的影响是不是啊?哎,那是这样的哈。那如果那为什么说我们放了指针之后呢, 它就可以交换了呢,对吧?哎,那是因为啊。啊。那么 a 有一块空间,里边装的是二, b 有一块空间呢,里边装的是三。然后呢, p a, p a 里边装的是有一块空间,也是指针边里有块空间,它里边装的啥?装的是 a 的地址,它是直写纸箱这块空间的对吧?那 p b 里 里边装的是啥呀?哎,也是 b 的地址,他只想直接指向这块空间。所以我 c n p a 操作的就是这块空间本身, c n p b 操作呢就是 b 的这个变量本身。 明白吧。哎,你刚才如果是没有星的,没有星的,你这里边装的二,这里边装的三,你这个交换交换的是他俩对吧?那你就操作这两个普通变量的啊,那你如果是用整形变量,里边就不加星了啊。啊,是不是啊?所以说呢,一定要呃, 对这个基本的执行过程要充分的去理解啊。那就是需要大家对这个最基本的这个代码呢,要有一个充分的理解他的执行过程呢。要知道啊,这个东西呢,没有特殊性,就是最普通的这样的一个属性啊。

大家好,今天我们讲参数的传递方式,直传递和地址传递。首先我们来看直传递。在主函数中定义 x 和 y, 输出 x 和 y。 调用放函数,将 x 和 y 传递给 i 和 b。 因为行参与时差要求顺序一致,所以 x 传递给 i, y 传递给 b。 在放函数中, i 等于 i 加十, i 变成二十, b 等于 b 乘以十, b 变成一百,输出 a, b 的值。放函数执行完 b 以后,返回主函数,继续执行下面的输出语句,输出 x 和 y。 请问这时候 x 和 y 的值是多少? 程序运行结果,调用前, x 和 y 都是十二。调用函数的时候, a 变成二十, b 变成一百。调用函数以后, x 和 y 都是十,说明 i、 b 的变化没有影响 x 和 y。 我们来看一下直传递的传递方式。首先定义四个变量, x、 y、 i 和 b。 每个变量在内存中分配一个存储单元存储数据。当 x 将值传递给 ii 的值变成一时, x 和 i 不再有联系。当 y 把值传递给 b, b 的值变成一时, y 和 b 不再有联系。我们以装修房子为例, x 已经 把房子装修好了, i 还没有装修好,他向 x 询问装修房子的信息,例如装修公司的电话,装饰的风格、装修材料、卖家等等, x 把这信息告诉 i。 至于 i 最终把房子装修成什么样式,对于 x 他们家的房子是没有影响的。根据这个思路,我们来看一下直传地的执行过程, i 等于 i 加上一时, i 变成二十, x 不受到影响, b 等于 b 乘以十, b 变成一百, y 不受到影响。需要注意,直传递是单向的,只能有时差传递给行差。 接下来我们看地址传递。地址传递是参数的传递方式中非常重要一个知识点,也是考试最喜欢考的一个知识点。在原程序中定了整形变量 x 和 y, 输出 x, y 的值。第二,用放函数。 由于行参与实参顺序一致,所以 x 传递给 i, y 传递给 b。 但是大家需要注意,就用放函数的时候, x 和 y 的前面都加上取地字符,所以是把 x 的地址传递给 i, y 的地址传递给 b。 在放函数中, i 等于 i 加十, i 变成二十, b 等于 d 乘以十, b 变成一百, 输出 a 和 b 的值。返回主函数,继续执行下面的输出语句。程序运行结果,电用前, x 等于十, y 等于十二。调用函数的时候, i 等于二十, b 等于一百。调用函数以后, x 等于二十, y 等于一百,说明随着 a 和 b 的变化, x 和 y 也发生了变化。接着我们来看弟子传递的传递过程, 定四个变量, x、 y、 i、 d, 每个变量分配一个内存单元, x 中存放十, y 中存放十。当 x 传递给 i 的时候, i 的存储单元中存放的是 x、 d 值,当 y 传递 b 的时候, b 的存储单元中存放的是 y 的地址。我们还是以装修房子为例, 孩子因为工作比较忙,没有时间装修房子,委托他的父亲去装修房子。不管是孩子还是父亲,他们所需要装修的房子是同一套房子。哪怕孩子把装修公司的电话、装饰的风格以及装修材料那一家的联系方式都告诉了他的父亲, 如果他的父亲对装修进行了修改,最终对于他的孩子来说,整个房子装修也发生了变化。 当放函数中 a 发生了改变,其实就是 x d 值中的值发生了改变,因此 x 变成二十哦。当 b 发生改变的时候,其实就是外 的地址中的值发生了改变,也就是说 y 变成了一百。需要注意,地址传递。行仓与时差指向同一单元,行仓发生改变,时差也要相应改变。 接下来我们看课堂练习有以下程序,程序输出结果是,这里我们选 a。 答案, 主函数中定义 a, b, m, n 调用放函数传递 a, b, m, n, a, b 是直存 d, m, n 是地址传递, i 传递给 x, b 传递给 y, m 传递给 c, n 传递给 d。 因为 m 和 n 是 d 字传递,所以 m 和 c 保持一致, n 和 d 保持一致。 c 等于 x 加 y 等于七,所以 m 等于七, d 等于 x 减 y 等于一,所以 n 等于一,因此选 a。 答案, 第二题,若函数的调用形式如下,则函数参数的个数是,这里选 a。 答案, x 一 x 二, x 三是逗号表达式,逗号表达式取最后一个表达式的值,所以只传递 x 三, y, e, y, o 是逗号,表的是只传递 y, 整个函数只传递了 x 三和 y, 因此选 a。 答案,接下来我们进行总结。 c 元中函数参数 传递方式有两种,直传递和地址传递。直传递是单向传递,只能有时餐传递给行餐,不能有行餐传回给时餐。 地址传递是指时仓将变量的地址传递给行仓,这样时仓和行仓指向同一内存空间, 行参改变,时参也跟着改变。地址传递参数用纸张数组名变量地址。下节我们讲数组作为函数的参数,今天我们的课程到此结束。

今日话题,虽语言中石身和行身的直传递,一直都不理解为啥行身不能传旨给石身呢? 在开始前,我有一些资料是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份私语言,从专业入门到高级教程加工具包,点个关注,全部无偿共享给大家。在评论区回复八八八,关注我之后,私信回复八八八 即可拿走。此处 a 和 b 是行参,它代表的是是函数所用的参数的形式。五和七是十参及实际参数 就是你执行艾特这个函数时真正使用的参数。行参就是函数为要传入的纸准备的一个外壳,而时身就是最后传入行身,也就是塞进那个壳里的实际的纸。在函数内,你可以使用外壳访问 内的值,函数挨着接收的行餐值五和七在函数内部可以根据某些业务规则,此处是加法运算,对五和七进行任何数据处理,然后返回处理后的结果及函数返回值。 resolve 是一个局部变量,不是时餐,他就是接收碍函数的返回值。 也就是说, result 为了获取到某种功能效果,必须调用某函数的功能才能达到。被调用的函数通过入身并处理这些数据,使得该函数完成这个功能后并返回结果给 result, 而 result 单独是无法接收和处理这些数据的。

hello, 大家好呀,超级简单的 gemini 使用教程来啦,前几天呢发的那个视频,首先没有想到有那么多人看,很感谢大家的支持,而且有很多宝子问我说 就是具体的 gemini 的 使用方法是什么样的呢?因此呢,今天就想给大家分享一些我觉得很好用,就是我用过并且亲测有效的一些路径,希望能对大家有所帮助吧。 首先呢是一个浏览器的插件,我们点开浏览器,打开它的侧边栏,找到扩展,点击获取扩展,然后搜索 desider, 我 们就可以打开这个插件,然后从这个插件点击获取,然后将它添加到扩展。 最后呢等它打开之后,然后查看,然后我们发现可以把它固定到工具栏里,这样我们就可以在这个收藏的小标旁边找到这个蓝色图标,点开 就是我们需要的这个 gemini 的 使用的一个路径啦,然后我们可以在这底下选择切换模型,然后也可以通过创建账户,这个时候使用自己的电子邮箱就可以啦,这样就可以直接使用啦。 第二个呢,就是一个 gemini 的 国内的镜像站,我们可以直接搜索这个网址,然后将它打开, 我们就可以看到这里,就可以选择 gemini 三点一 pro 专区,然后任意选择一个通道,点击进去,这个就是我们可以直接使用的界面啦。以上的分享就到这里啦,希望可以对大家有所帮助,拜拜。

天上剑仙三百万,见我也须敬低眉。曾经我以为这只是夸张,直到我用 ai 还原了这一幕。三步速成,你也可以首先找到这个,再摸一下这里,然后打开豆包,点这里的 cds, 二点零,先点这里创建分身,然后粘贴我评论区的指令,点这里发送,稍等一会就生成好了。


大家好,欢迎大家来到潭州教育,我是潭州教育丹妮老师,今天我们来继续讲解我们的函数, 今天呢我们主要讲解的是一个行餐和一个食餐的区别。首先什么是行餐?什么是食餐?我们在以前在写一个函数的时候,比如说我们的 in fact 函数里面有一个参数,对于那一个小括号里面的,我们把它叫做行餐, 行餐呢,只是在定义这个函数的时候,而不是在使用这个函数的时候, 主调与背调函数之间呢,有一个数据的一个传递,这就是有参函数。比如说我在麦函数里面去调用一个放函数,在调用的时候我需要把一个值给放函数去使用, 等一下我会带着大家去做例子,在定义函数时呢,函数名后面括号中的变量就称为形式参数,也叫做形参。在主调函数中调用一个函数的时候,就是 在钓鱼一个函数的时候,函数名后面括号中的参数呢,我们叫做时餐。 ok, 等一下下面的一个小例子就有详细的说明啊, 我们要注意一个点,什么点?就是在发生函数调用时,调用函数把食餐拷贝一份传递给我们的那一个。呃,行餐,行餐拿到这一个食餐之后,拷贝的这一份食餐之后再去进行操作,所以 我们等一下有一个小例子让大家去做一下,我相信很多同学都会犯这样的一个错误。好,我们 先看一下下面的这一个小例子,有一个范函数,然后我们在麦函数里面我们调用了一个范函数,对吧? 首先我们定义了一个印特 y 的一个变量,他的初始值是二十,然后我们调用范函数的时候,把我们的这个初始值放进去,这是函数的一个调用方式,然后 当他执行到这一个范函数的时候,他才真正的去把 x 的值进行复制和申请。内存空间 在我们的代码没有调用,我们在这个地方加两个斜杠进行注视之后,这一个 x 他永远是没有内存空间的,这个 x 他只是一个表面上的 x, 比如说小宝贝还没有出来或者还没有出事的时候,我们把他取了一个名字,那个名字不是 是说对应的一块内存空间,而是一个虚拟的一个假的,只是人为的给我们看的一个内存空间。我们可以拿着这一个 x 这个变量去进行操作,但是 x 是不是真的存在呢?在我们没有调用之前, x 是不存在的。比如说我们的这一个 x 在内存中他是占用四个字节吗?硬塔类型在内存中是占用四个字节。三十二位集集上以前给大家讲过,而这个地方他并没有占用四个字节的内存, 这个地方只是一个名字,他根本不占用内存。只有我们当我们在调用的时候,我们调用这一个放函数的时候,我们可以看一下调用放函数的时候,把这个 y 的值放进去,这一个 y 他就是实实在在存在的。 当我们代码一直运行,运行到这个地方的时候, y 他是存在占用四个字节内存,在四个字节内存里面的值负值成二十,对吧?这就是他的一个时餐和一个形餐。好,我们可以把这个小练习练一下,然后看一下他的一个小小的效果。 好,我们创建一个温三二的一个控制台程序,大家可以跟着我一起做。首先我写了一个范函数,对吧?写了一个范函数,他的返回值是 word 类型的,说明他没有返回值,他的参数是一个应特类型的,应特的 x。 好,然后我们干了一个什么事,就是把它的值打印出来,对吧? print f 打印什么呢?把 x 的值打印出来。 hello, hello, x 等于摆放号 d, 对吧? 以前我们在讲仆人 f 的时候也讲过,然后把 x 的值打印出来,对于这一个 x 来说,他是一个行餐,对吧?如果我们不调用,他永远都是没有内存空间的。而我们在这个地方,比如说我们定一个 y 等于二十。好, 同学们可以想一下,我这个地方定义 y 等于二十的时候,我们答应的结果,这个 x 它是多少呢? 我们调用完之后,调用范函数,把这个 y 值放进去,他打印的是一个 x 的值,对吧?对不对?这个地方打印的是一个 x 的值,而我们传进去的是一个 y 的值。我们把 y 放进去,他打印的是多少呢?刚才在注意项里面给大家已经讲过,注意项里 说,我的实餐拷贝了一份给谁呢?拷贝了一份给行餐,对吧?所以说这个地方的 x 和这个地方的 y, 它都是同样的值,但是呢,它是一个拷贝本。 所谓的拷贝呢,就是我克隆了一个 x 出来, x 干事,和你 y 有关系吗? x 是不是以克隆的一个副本?我在这个地方对 x 进行任何的操作, x 加加 x 减减,你的这个 y 值不会进行改变。 好,大家如果不信的话,我们可以进行一个小小的测试,好 x 加加,好加加操作。我们也讲过了, x 加加的时候,我们打印的 x 值应该是多少,对于这个题来说,它是二十一,对吧,而现在我再把 y 的值打 出来,好,好的,同学觉得这个地方不过瘾。好,我们这个地方也改成 x, 我们看行不行?好,首先我们编一下,看我们的代码有没有错误。好吧, 好,应该是没有错误的,为什么呢?这就是涉及到下面我们要讲解的内容了。 好,这个题没有任何问题。好,这,为什么这个地方定 x, 这个地方还可以定 x 呢?在后续会给大家讲到,首先对于这样的一个 x 和这样的一个 x, 他两个不是同一个 x, 这一个 x 是这一个 x 一个拷贝本,所以我把这个地方的 x 复制成二十,然后 x 加加之后得到了 x 是二十一,而这一个 x 还是二十。 好,我们把这一个实际上的 x 等于多少,我们打印出来。 对于,对于函数里面,我们加了一个 hello x 等于,对吧?对于没有函数,没函数里面,我们直接把 x 的值打印出来,我们看一下两个结果是不是一样的呢?好,我们编译,我们运行看一下结果, 看他的值是不是真的一样呢?应该来说是不一样的,对吧?因为我们在 这一个函数里边修改了这一个 x 的值,这只是他的一个拷贝本,所以我们在后面打印的时候,这个 x 的值没有任何的改变,所以有一个特别经典的啊,在 c 语言里面有一个特别经典的一个 题,叫做什么呢?交换两个变量的值,印特 x 和印特 y, 我要把这两个变量的值进行一个交换,比如说我的印特 x 等于二十,印特 y 等于三十, 现在我调用范函数之后, x 和 y, 我要把他们两个的值进行交换。怎么交换? 第一种情况, intel temple, 我先定一个局部变量, intel temple 等于 x, x 值保存,然后 x 值等于 y 的值,然后把 y 的值等于 temper 的值, 可以接受吧,应该没有什么问题啊,等于 time 的值。好,现在是不是 x 是等于 yy 等于 x, 现在的 x 应该是多少了?现在 x 应该是三十了, 对吧?而 y 变成了二十,这个代码同学们应该都可以看得懂。好,现在我再把 x 和 y 打印出来, x 值是多少呢? x 值到底是多少呢? y 的值到底是多少?我们看一下结果。好,我们把 x 和 y 的值打印出来。 好,现在同学们可能会觉得 x 是三十, y 是二十,为什么?因为我的函数里面已经交换了两个数字,对吧?好,那到底最后的结果是不是三十和二十呢? 还是二十和三十,对吧?说明一个什么问题?说明我的函数里面的 x 和 y 只是一个拷贝本,我在函数的里边修改 x 和修改 y 的值,对于函数外部的这个 x 和 y 没有任何的影响。这就是刚才我们注意点里面所讲到的那一个知识点。 ok, 好,相信同学们都已经理解了。 好,行餐和实餐,他有一些什么特点呢?首先啊,行餐在调用前只是一个形式,不占用任何的内存空间, 这一点给大家讲过,在背调函数结束后,行餐所占存储空间被释放。好,这一句话不矛盾,他是说在调用的时候,行餐就开始占用内存空间了,在调用之前他是不占用的, 因此行餐只有在该函数内有效,所以我只可以在函数的内部去操作我的这个 x 和 y。 函数结束后,返回调用函数后,则不能再使用该变量的行餐。 ok, 好。第二点,食餐可以是常量,变量表达是函数等等,食餐可以是函数。同学们无论食餐是何等类型的,在进行函数调用的时候,他们都必须具有一定的值。 我在调用函数的时候,我直接定了一个 x, 我不给他付书值初始值,而我把它当做一个函数的一个时餐的时候,可能会出现一些意想不到的结果,所以我们在调用函数的时候都必须具有确定的值,以便把这些参数全给行餐 因子。因,首先要进行复职、输入等一些操作啊。 ok, 是食材 获得确定的一个值。好,第三点呢,实餐对行餐的数据权利是单项的,即只能把实餐的值传给行餐,而不能把行餐的值反传给实餐。 这就是刚才其实就是说他的一个拷贝,我把食餐里面的纸拷贝了一份,放到行餐里面去了。行餐做任何的操作,他都不会影响我食餐的一个结果。 所以说我时餐可以把值给行餐,而行餐不可以把值传递给时餐。如果我要把结果传递出来怎么办?可以用到返回值。 好,食餐和行餐占用不同的内存单元及同名也互不影响。刚才我们做了一个同名的,对吧? 因为他们是一个拷贝本,两个占用了不同的一个存储空间,所以我对他们进行操作,尽管名字一样,内存空间他是不一样的,所以我不会受到任何的影响。 好,刚才就讲到了一个返回值,对吧?对于一个函数啊,我如果要得到他的一个结果,对于函数的参数呢,我们可以当做一个输入来 来理解,比如说我要得到两个数的值,首先输入第一个数,然后再输入第二个数,我可以得到两个数的值。而如果说我要得到这一个两个数相加之后的一个结果呢, 我们可以通过 rayten 函数去获得。好,下面我们来就讲解一下 rayten 函数。 rayten 函数呢,是函数的一个 返回值。好,通常呢,我们希望函数调用主调函数得到一个确定的值,这就是函数的返回值。 好,下面有详细的说明。函数的返回值呢,是通通过 return 语句来获得的,当不需要返回值的时候,可以省略。刚才我们做的就是没有返回值的情况,我们直接在前面加了一个 word, 对吧?好, return 语句的后面可以是 常量,也可以是表达是,例如 a 大于 b。 ok, 好,那我们 同样的用 vs 二零一三做一个小小的测试好,还是刚才的代码我们进行注视啊,我们直接删除,我们重新写。还是这个范函数,我们测 测试一下瑞特语句,怎么使用瑞特语句呢?他返回什么样的一个类型,一定是范这个名字之前的这个类型所决定, 比如说我现在写的是一个印特,尽管你的返回词是一个波尔类型的,或者说是一个差类型的,他最后他都会变成一个印特类型的,或者变音器直接提示你的错误。 所以一个函数的返回值,一个函数的返回值是什么类型?通过函数定义的时候已经确定了,并不是你的瑞特与句来决定。 好,现在我们想得到一下 x 和 y 的值,然后把 x 和 y 的值返回去,怎么办?第一种情况, return, return, 刚才说 return 后面 也可以加一个表达式,对吧?所以我们直接把它的和返回去 x 加上 y, 或者说我们更确切的,我们打一个小小的括号,现在我得到的这一个硬头类型就是 x 加 y 之后的一个结果。好,现在我们来调用一下方案函数。 第二,用方案函数之后, x, 比如说是十, y 是二十,也就是我们刚才十餐和行餐里面的第二点 时餐呢?它可以是长量,可以是变量,甚至说可以是函数,对吧?现在我们用的就是一个长量十和二十。好,对于这样的一个函数,我们调用完之后,我们怎么得到它的一个结果?我们怎么得到它的一个返回词?下面 就有这样的一个介绍啊。好,这是函数的生命和嗯定义了。好,怎么去得到这样的一个表达式呢?怎么得到这样的一个值呢?下面我们可以测一下啊,直接在前面定义一个接收值,比如叫上等于 范十加二十,得到了结果是多少呢?我们把结果打印出来,我们看一下上到底是多少呢?百发号地。 好,我们结果是什么?就是上这一个电量,对吧?好,我们打印看一下,最后的结果。 好,直是三十,说明一个什么问题?说明这个丧确实是他的一个返回 值,他把这个值返回之后,等于我拷贝了一份,把这个拷贝的这个东西给了谁呢?给了这个丧,如果你这个地方没有丧,他就不会把这个值传递给我们,而直接进行丢失。 你这个地方不一定说要接收值,还是有返回值,你可以接收,也可以不接收。如果你接收的话,一定要和他的类型相匹配,这里返回的是一个硬头类型,那你就有用一个硬头类型的一个变量进行接收,等于这一个范。 如果说这里返回只是大把类型,我们用大把类型去接收, ok, 这是他的一个返回词。好,那现在如果,哦,好,我们刚才测了第一种情况啊, x 加 y, 把瑞特当做一个表, 好的,是返回。还有第二种情况,什么情况?就是我定一个变量叫做上,比如说等于 x 加上 y, 然后我们把上的值返回去,同样的,这也是可以的,这个上和这个上不是同一个上。 ok, 好,最后得到了十加二十的结果,改上函数,然后我们把上变量,我们把上打印出来。好,这就是 reton。 返回值。 好,对于瑞特呢,并不是所必须的,有的函数我们并不一定要得到最后的一个结果,比如说我这个函数,我只想让他打印出一个值,打印出我的参数的值,把印特歪的值打印出来就可以了,并不一定需要参数。呃,并不一定需要他的一个返回值, 所以我们这个地方根本没有必要 rate, 对吧?如果没有必要 rit 的情况呢?我们就直接在函数的前面加一个 word 就可以了。 好,在前面加一个 word 代表没有没有返回之,如果没有返回之的情况,我们用一个变量去接收就是一个错误的。 ok, 好, 如果没有返回词,我们直接调用范函数,他打印的结果就是十,对吧。 ok, 我们看一下结果, 好,最后的结果是十对不对?所以对于一个函数来说,他的 返回值不是必须的,可有可无,根据你的业务需求来。 ok, 这就是我们今天所讲的一个函数的返回值。一个 食餐,一个行餐。 ok, 好,我们的下一节课给大家讲函数的声明和定义。好,我们这一节课就到这里,感谢大家来到潭州教育,我们下一节课再见!