Private Sub Command2_Click()
 x = 8: y = 2
 Call fun1((x), y)
 Print x, y
 End Sub
 
 Private Sub fun1(x, y)
 S = x
 x = S / y
 y = S Mod yEnd Sub

Private Sub Command2_Click()
 x = 8: y = 2
 Call fun1(x, y)
 Print x, y
 End Sub
 
 Private Sub fun1(x, y)
 S = x
 x = S / y
 y = S Mod yEnd Sub
print 出来的植分别是8,0和4,0
Call fun1(x, y)和Call fun1((x), y) 有什么区别啊/ 是不是前者传地址后者传值啊??
谢谢大家

解决方案 »

  1.   

    后者一定是传地址,因为VB中参数传递默认就是按地址传递,否则x,y的值是不会改变的  前者在调用过程funl时将第一个实参用括号括起来是什么意思就不知道了.  但是在函数调用传递参数时是按地址传递,还是按值传递是由函数定义时决定的,二者调用的是一个
    Sub子过程,所以二者都应该是按地址传递.
      

  2.   


         接上面     经过我单步调试发现:
         前者在实参x传递给形参时还是8,在funl过程中x最后计算得到的值也还是4,但是此时主调程序中的x还是8,而不是4,这就说明实参与形参并不是指向同一个内存单元,所以Call fun1((x), y)中(x)的括号的作用是将按地址传递参数的方式改变为按值传递.(即在函数定义之后重新确定参数传递方式,方法很灵活!)