写给初学者:VB 中 ByRef 与 ByVal 参数传递方式的区别

来源:互联网 发布:淘宝网道闸哪家好 编辑:程序博客网 时间:2024/05/22 02:01
简而言之,ByRef 和 ByVal 的区别在于参数源是否可以被函数修改,前者(默认方式)是可以被修改的,而后者是不能被修改的。
例:
Private Function Func(ByRef argv1 As StringByVal argv2 As String)
    argv1 
= "I love WYC!"
    argv2 
= "I love WYC!"
End Function
调用:
Sub Main()
    
Dim a As String, b As String
    a 
= "This is a!"
    b 
= "This is b!"
    Func a, b
    
MsgBox a & ";" & b
End Sub
程序执行后的结果为:I love WYC!;This is b!
原因是:ByRef 类型的参数在函数过程中被重新赋值,所以函数调用结束后,a变量的值为新被赋予的“I love WYC!”,而作为 ByVal 类型的参数b,由于不能被程序修改,即使在函数过程中对该变量重新赋值,其值仍为函数调用前的“This is b!”。另外,声明 ByRef 类型的参数时,可以不声明为 ByRef <参数><类型>,而只用 <参数><类型> 即可, ByVal 则必须使用 ByVal <参数><类型>