VB 变量、参数传递的基本知识:
ByRef 与 ByVal 传值的区别
传递方式:
ByRef 表示该参数按实际地址传递,源数据可以被调用的函数修改。ByRef 是 Visual Basic 的缺省、默认选项。
ByVal 可选的,表示该参数按值传递,源数据不会被调用的函数修改。
参数含义:
ByRef 是传址,就是把变量的地址传送给函数,在函数的内部对参数的修改,实际上是对变量地址里的数据修改,所以当函数返回的时候,传进来的变量也是跟着改变的。
传送参数内存的实际地址给被调用者。也就是说,栈中压入的是实际内容的地址。被调用者可以直接更改该地址中的内容。
ByVal 是传值,顾名思义,就是把变量的数据传给函数,函数内部对其做任何处理都不会影响变量本身的值。
传送参数内存的一个拷贝给被调用者。也就是说,栈中压入的直接就是所传的值。
演示代码:
Private Function TestByVal(ByVal Tmp1 As Long)
Tmp1 = Tmp1 + 1
End Function
Private Function TestByRef(ByRef Tmp1 As Long)
Tmp1 = Tmp1 + 1
End Function
Private Sub Form_Load()
Dim Tmp As Long
Tmp = 1
TestByVal Tmp
MsgBox Tmp
'显示:Tmp 的值为 1。
TestByRef Tmp
MsgBox Tmp
'显示:Tmp 的值为 2,因为 TestByRef 中的参数 Tmp1 为 ByRef。
'ByRef 是按地址传递,因此在 TestByRef 中对 Tmp1 进行修改后,将会导致源参数 Tmp 的值也被修改。
End Sub