51Testing软件测试论坛

标题: 传递值还是传递引用? [打印本页]

作者: li5tun    时间: 2009-10-12 18:02
标题: 传递值还是传递引用?
看下面的两段代码:
A、参数通过引用传递
Function learnqtp( ByRef var)
    myname= "li5tun"
    msgbox var
    msgbox myname
End Function
myname= "LI5TUN"
call learnqtp (myname)
B、参数通过值传递
Function learnqtp( ByVal var)
    myname= "jain"
    msgbox var
    msgbox myname
End Function
myname= "ankur"
call learnqtp (myname)
代码A、代码B的输出分别是什么?为什么会是这样?实在想不起来就在QTP中运行一下!
作者: shanxi    时间: 2009-10-12 19:10
传引用传递的是指针地址

而传值则不是

这只是一种通用的解释,对不同语言来说,其内部实现都略有不同。
作者: Haereticus    时间: 2009-10-12 19:19
这里和传值传递还是引用传递没太大关系,只是局部变量和全局变量的优先级问题。
Function Swap(ByVal a,ByVal b)
   Dim Temp
   Temp = a
   a = b
   b = Temp
End Function

Function Swap(ByRef a,ByRef b)
   Dim Temp
   Temp = a
   a = b
   b = Temp
End Function
a = 1
b =2
Swap a,b
msgbox a
msgbox b
作者: dabeixiong    时间: 2009-10-12 21:04
嗯...LS说的不错,LZ的例子确实也涉及到了变量作用域的问题

而且LZ你想说啥?是求助帖还是想说明什么问题?
作者: hsjzfling    时间: 2009-10-13 11:27
LZ的例子与局部变量还是全局变量没有一点关系,3楼给的例子也只是与参数传递方式有关。。。

Function learnqtp( ByRef var)
    myname= "li5tun"
    MsgBox var        '此处var会动态读取传入参数myname的值,并且对var的修改会实时影响到myname的值
    MsgBox myname
    var = "zoey"
    MsgBox myname
End Function
myname= "LI5TUN"
Call learnqtp (myname)

Function learnqtp1( ByVal var)
    myname= "jain"
    MsgBox var        '此处var为传入时的myname的值,并且对var的修改不会影响到myname的值
    MsgBox myname
    var = "Sally"
    MsgBox myname
End Function
myname= "ankur"
Call learnqtp1 (myname)




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2