[音乐]
有没有说是,如果我要是现在要做一个方法,那么 它既要求和,又要求两个数的差。
那么我们也知道一个 return 永远只能返回一个数据,对吧?一个这样的一个数据,它不可能这样返回两个数据。
那么我们可以利用 reference 来做这样的一个设想。
我们来看一下, 这个例 10。
首先我们打开这样的一个 Visual Studio。
{空白_声音]
在这个新建项目里面,我们 新建的是 EX10,
[空白_声音] 我们要第 10 个例子了,要用。
[空白_声音] 确定。
完了之后我们把这个例 10 拷贝过来。
选中例 10, [空白_声音]
[空白_声音]
注释我们的一个选定的内容也是快捷键 Ctrl K,再按下 Ctrl C。
好了,那么在这样的一个例子当中,我们首先来看一下我们刚才所讨论的问题。
那么是这样的一个情况:如果,如果我, 如果我这儿有一个,原先有一个
static 这样的一个 add 的 int,这样的一个能够把两个数,
[空白_声音] 能够把两个数加起来的这样的一个函数。
[空白_声音] 那么从在此函数里面,
[空白_声音]
那么很容易的可以得到这样的 int。
x3 应该等于,如果把这两个数加起来的话,应该是 8,
x1,x 加上一个2。
那么由于我们前面介绍过这样的一个 reference 这样的参数,那么我现在可以说的是:
如果有了这样的一个 reference 参数的话,我们完全可以把这样的一个
add 函数 声明成 log 型的,也是可以达到同样的效果的。
这是毫无疑问的。
可以这样做,我们把它改成, 注意看,我们把它改成 log 型的。
然后完了之后我们在这边 增加一个第三个参数,把它作为一个引用传递过来,reference int x3。
那么由于这样的一个 函数,它是这样的一个 log 型的话,当然不能够这样标用了。
那么我们只能够, x3 设定完了之后,
add 的 x1,
x2,reference x3,那么只能有这样子标用。
但是这样子标用有 一个问题,那么它有会这样的一个提示,告诉这样的一个局部变量
x3 没有初始化就使用了,这在iii up 里面 是不允许的。
所以说我们可以随便给 x 一个初始,当然了
我们的本意是什么?本意的是在,是应该是在 利用这样的一个 x3
的 reference 函数把 x1 和 x2 这样的一个结果怎么样呢?代回来。
所以说在这里面我们, 因为它是 log 型的,所以说它也没有,不能够有返回值。
应该写 x3 等于 x1 加上这样的一个 x2。
那么注意现在看我们这样的一个代码, 我们在这样的一个代码里面,
x1、 x2 通过值传递, 并且 x1、 x2 本身也是值类型,也就是说拷贝一个副本给这个 x1 和 x2。
注意在这样的一个函数或者子方法里面,要这样iii 它的
x1 和这个 x1 是两个空间, 两个空间。
那么在主函数进行调用的时候会 重新分配一个 x1,然后把这个
x1 的值拷贝过来; 重新分配一个 x2,把这个 x2 的值拷贝过来。
但是到了 x3 的时候,由于 x3前面带有这个 reference 这样的
一个标识,那么就不会再为这个 x3 分配
新的空间了,而是使得这个 x3 和 这个 x3 共用一个空间。
这是我们的引用传递。
在这样的引用传递情况下,在这里面做了 x1 加 x2 的值化,那么就 存到了 x3 这个空间里面。
因此也就是存到了这个空间里面, 那么这个 x3 的值最终会是 8。
所以这样的话,如果我们 console.
,write, 如果我们打印出来 x3
的值的话,那么 x3 的值将不会是 0,而应该怎么样呢? 而应该是 8。
我们可以摁下这个 Ctrl F,运行一下进程一看,结果将会是 8。
那么同样的如果我们要在一个函数里面,在这个 add
这个函数里面,既求, 既求这个加,也求这个减,
也要求出来这个减法。
那么 不要换,我们会在把它剩下
这个 add m 的话,那么我们可以怎么样呢?可以类似的再增加一个,
再增加这样的一个新的变量 x4,
对吧?再这样增加 x4,然后在这边也增加一个新的变量 x4。
那么使得什么呢?使得这样的一个 x4 等于
x1 减去一个 x2,使得
这样的一个 x4 等于 x1 再减去这样的一个 x2 的话那么。
而在 这样的一个调用的时候我们再增加一个新的
int,这样的一个 x4 的这样的一个值。
那么在输出的时候我们分别输出 x3
和 x4,x3 和 x4 的使用版。
[空白_声音]
那么就 形成了这样的一个程序。
那么完了在第一个值里面求了 x1 和 x2 的和是 8,
在第二个值里面里面求了 x1 减 x2 的差,应该是 -2。
我们看一下结果,8 和 -2,8 和 -2。
那同时我们也看到用这样的方法存在着一个
不太爽的问题,是什么呢?就是我们 必须要给出这个 x3 跟 x4 的一个初始。
当然这是一个好的预防, 因为它防止你在没有赋初值的情况下就直接使用了 x3、 x4。
但实际上我们这里的 x3、 x4 确实是在, 它为了是从这样的一个方法里面,add
m 里面代回来值,而不是为了代入值。
所以说怎呢?所以说它确实也没有必要,要这样的一个初值。
因此在这样的情况下我们可以重新用一个关键字 来取代它,而不是要用 reference 这样。
重新用一个新的关键字, 这样的一个新的关键字叫做 out。
那么有了这样的一个 out,这样的一个 关键字了之后,那么我们就可以不需要再为这个
x3、 x4 怎么样呢? 赋这样的一个初值。
直接可以申明 x3 和 x4, 就可以了。
最终我们在程序里面就写成了这样。
那么也就是说我们纯粹的传入了两个变量 x3、
x4, 传入这两个变量的目的并不是为了要从
这个,将要调用的这个方法里面 传入什么东西,而是为了得到什么东西,传出来什么东西。
所以说称之为 out 传输。
这样的传输由于是纯粹是为了得到什么东西而用的,所以说在传入的时候, 这样的传入可以没有初值。
这是它跟 reference 这样的一个作用的一个区别,一个写法。
关于 out 就到此为止。