Private Sub Form_click()
Dim x As Integer, y As Integer, z As Integer
x = 1: y = 2: z = 3
Call sub1(x, x, z)
Call sub1(x, y, y)End SubPrivate Sub sub1(x As Integer, y As Integer, z As Integer)
Dim i As Integer
x = 3 * z
y = 2 * z
z = x + y
Print x, y, z
End Sub
为什么输出的是6,6,12与6,10,10啊?
能不能解释一下啊?
还有在y前面加上byval会怎么样?按值传递。
byval与byref我也看了很多遍,能否请哪位大牛再帮忙解释一下,加深我的印象。

解决方案 »

  1.   

    现在你所给的是默认的传参方式,是byref,传址,传址方式和c中的指针差不多,在子程序中,改变传入参数的值,实际上将主程序中的变量的值也改变了!如:
    第一次 call sub1(x,x,z) ------call sub1(1,1,3)
    x=3*3=9,注意,主程序中x也是9了;
    y=2*3=6,注意,主程序中x变为6了;为什么x是6呢?因为,调用sub1时,第二个参数传入的x;
    z=x+y实际上是z=x+x,这两个x都是指主程序中的x,此时x=6,所以z=12
    要注意子程序的y是指向主程序中的x。
    第二次 call sub1(x,y,y) ------call sub1(6,2,2)
    以下自己看吧至于byval是比较简单的,就是子程序和主程序中的变量没有关系
      

  2.   

    简单点来说,因为默认的传参是ByRef,所以你第一次CALL的时候是x,x,z,所以sub1里面的y和x实际上是同一数,也即原来的x