實例: 復制代碼 代碼如下: sub Add1(ByVal no as int32) no=no+100 end sub sub Add2(ByRef no as int32) no=no+100 end sub private sub button1_click(sender as object,e as eventargs)handles button1.click dim a as int32 a=100 Add1(a) msgbox ("a的值為:" & a) '顯示:a的值為100 Add2(a) msgbox ("a的值為:" & a) '顯示:a的值為200,因為Add2中的參數no為ByRef,即 '按地址傳遞,因此在Add2中對no進行修改后,將會導致 '源參數a的值也被修改。 End Sub
—————————————————————————————————————— 3、ByVal和ByRef ByVal傳遞的參數值,而ByRef傳遞的參數的地址。在這里,我們不用去區別傳指針/傳地址/傳引用的不同,在VB里,它們根本就是一個東西的三種不同說法,即使VB的文檔里也有地方在混用這些術語(但在C++里的確要區分指針和引用) 初次接觸上面的程序二SwapPtr的朋友,一定要搞清在里面的CopyMemory調用中,在什么地方要加ByVal,什么地方不加(不加ByVal就是使用VB缺省的ByRef) 準確的理解傳值和傳地址(指針)的區別,是在VB里正確使用指針的基礎。 現在一個最簡單的實驗來看這個問題,如下面的程序三: 【程序三】:體會ByVal和ByRef 復制代碼 代碼如下: Sub TestCopyMemory() Dim k As Long k = 5 Note: CopyMemory ByVal VarPtr(k), 40000, 4 Debug.Print k End Sub