标题: [原创] VBS过程(sub)传值(byval)与传址(byref)的区别 [打印本页]
作者: yuihi 时间: 2012-3-31 11:45 标题: VBS过程(sub)传值(byval)与传址(byref)的区别
在VBScript程序员应用手册上看到这点,感觉很这本书很有用,发出来和大家分享。
定义方式:sub 过程名(byval 变量1,byref 变量2)
传值(byval):在sub过程中,定义成传值的话,对脚本级变量修改只限于过程中,过程结束,脚本级变量恢复原来的值。因为这种修改是临时的,可以想像成过程中的变量名虽然与脚本级变量名一样,但是对应不同的地址。
传址(byref):在sub过程中,定义成传址的话,对脚本级变量修改是永久的,过程结束,脚本级变量值变化。这种修改是对变量原址的修改,即对原变量的修改,是永久的。
例子(缘自《VBScript程序员应用手册》):-
- Option Explicit
- Dim lngA
- Dim lngB
- lngA = 1
- lngB = 1
- ByRefByValExample lngA, lngB
- MsgBox "lngA = " & lngA & vbNewLine & "lngB = " & lngB
- Sub ByRefByValExample(ByRef lngFirst, ByVal lngSecond)
- lngFirst = lngFirst + 1
- lngSecond = lngSecond + 1
- End Sub
复制代码
结果如下图:
[attach]5079[/attach]
作者: Python 时间: 2012-3-31 12:28
基本上所有语言的传值和传址都是这样的
作者: ivor 时间: 2012-3-31 15:14
本帖最后由 ivor 于 2012-3-31 15:16 编辑
难道这是 引用传递和值传递。。
作者: ivor 时间: 2012-3-31 15:21
值传递只是将参数复制一份而已,函数进行操作的是另一个参数,只是另一个参数的值和传递的参数值是相同的。
而地址传递是直接把参数的地址传递给函数,这时函数是直接对原来的参数进行操作的。所以值会变化。
作者: yuihi 时间: 2012-3-31 15:50
回复 4# ivor
我觉得可以这样理解啊
作者: applba 时间: 2012-4-8 19:29
微软有专用说明:ByRef和ByValue。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |