c++ - vb 中形参 实参 ByVal ByRef 有什么实例?
天蓬老师
天蓬老师 2017-04-17 14:28:22
0
3
901

编程业余爱好者..

我也百度搜了,但是说的我也看不明白,都是专业属于...

别鄙视我,给我举个简单的例子呗.

天蓬老师
天蓬老师

欢迎选择我的课程,让我们一起见证您的进步~~

全部回复(3)
PHPzhong
Sub Foo(ByVal p1, ByRef p2)
  p1 = 9
  p2 = 9
End Sub

Dim a As Integer
Dim b As Integer
a = 1 : b = 2
Foo(a, b)
' 此时 a 的值不变,仍为 1
' b 的值变为 9

这里“形参”就是p1p2,“实参”就是ab
调用Foo时,系统把a复制了一份传给p1,因此改变p1的值不影响a。而p2代表对b变量的引用,改变p2也会让b变化。

好久不写 VB 了,有错还请各位指正。

小葫芦
Sub Foo(ByVal p1, ByRef p2)
  p1 + p2
End Sub

形参就是预设的可传入参数,Foo 声明了接受两个参数,p1 和 p2。这个时候实际上p1 和 p2只是理想状态,并不是实际参数,所以叫形参

Foo(1, 2)

调用Foo的时候传进去两个实际的,有意义的参数,1和2是实际参数,所以叫实参

迷茫

先弄明白形参和实参,形参是定义函数时括号里的参数,实参就是使用这个函数时实际上往里传入的参数。
再弄明白,变量是存在内存里的,每个变量会有属于自己的一块独立的内存空间,每个内存空间又有地址,通过地址能找到这块内存。
然后看这两个英文的意思,ByVal:按值传递,ByRef:按地址传递。
什么是按值传递呢?就是先给形参开辟一个新的内存空间,将实参的内容传入这个新的内存空间,这样传递后,形参与实参是在两个不同的内存空间中,也就是说他们是相互独立的,你在函数中怎么折腾这个形参,折腾的都是这个临时内存空间,和实参没关系,它静静的躺在自己的小屋里。
什么是按地址传递呢?就是直接将实参的内存空间地址传递给形参,这样,形参与实参就共用一块内存,所以,形参内容的改变也直接改变了实参的内容,你在函数中折腾形参,等同于折腾实参。
所以一般情况下,函数都会有个返回,因为函数默认都是按值传递,如果不返回,这个函数执行完,那些临时内存空间就释放了,执行半天啥也没了,当然,如果你定义了按地址传递,那就无需返回了。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板