VB的调用函数的问题

来源:百度知道 编辑:UC知道 时间:2024/06/14 10:01:01
Private Sub Command1_Click()
Dim a As Integer, b As Integer
a = 5
b = 10
addone a, b
Print a, b
End Sub

Sub addone(ByVal a As Integer, b As Integer)
a = a + 1
b = b + 1
End Sub
为什么显示结果是5 11 请解释下

因为你用VB 6.0,VB 6.0 参数默认是by ref,传引用,也就是把外界的B传递到过程中去了,所以b加了1,而a是by val,值传递,所以外界的a没有发生变化。

关键在于那个ByVal,这是按值传递的模式。在这种模式下,调用函数时,是在内存中给形参分配一个临时的地址,将实参的内容COPY到这个地址指向的内存区域。如果修改形参,实际上只修改了这个临时区域的内容,实参不会受到影响。

如果是ByRef,这是按地址传递,形参和实参共用一片内存空间,所以形参的改变会反映到实参上。

函数调用时,如果没有指定 ByVal或ByRef,则默认为ByRef。

在你的例子中,a是按值传递,形参改变不影响实参;b由于未指定传递模式,按ByRef处理,形参改变会影响实参。所以得到最后的那个结果。

Sub addone(ByVal a As Integer, b As Integer)
第一个参数按值传递,第二个是按地址传递,所以第一个只是把值传进去了,里面怎么改外面没关系。外面的A与里面的A是两个值,而第二个参数传进去以后他们都是指向同一个数,因为是按地址传进去的