实例: 复制代码 代码如下: 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