vb 中形参 实参 ByVal ByRef 有什么实例?

发布于 2022-09-03 12:17:45 字数 77 浏览 18 评论 0

编程业余爱好者..

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

养猫人 2022-09-10 12:17:45
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 了,有错还请各位指正。

东京女 2022-09-10 12:17:45
Sub Foo(ByVal p1, ByRef p2)
  p1 + p2
End Sub

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

Foo(1, 2)

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

一腔孤↑勇 2022-09-10 12:17:45

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文