关于VB里 ByRef(按地址传递)与ByVal(按值传递)用法解析 -杨雪
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


关于VB里 ByRef(按地址传递)与ByVal(按值传递)用法解析

发表时间:2016/9/3 8:24:37 评论(0) 浏览(15784)  评论 | 加入收藏 | 复制
   
摘 要:首先感谢一下 mjwqjhqj5814 网友,他解析的 ByRef(按地址传递)与ByVal(按值传递)用法,真的是最简单直白,通俗易懂的。希望对ByRef(按地址传递)与ByVal(按值传递)用法很迷糊的童鞋有所帮助!
正 文:

示例:

1    Private Sub Form_Load()
2    Dim x As Integer
3            x = 2
4            A x
5            Debug.Print x
6    End Sub


7 Sub A(ByRef t As Integer)
8            t = t - 1
9    End Sub

 
10 Sub B(ByVal t As Integer)
11            t = t - 1
12    End Sub

 
13    Sub C(t As Integer)
14            t = t - 1
15    End Sub


解析:

这是一个极为简单的Toy程序(呵呵,就是小玩具),不过他却体现了传值和传引用的巨大区别。

第7、10、13行分别是一个过程,这些过程都实现了同一功能,即将参数t的值减一。

在窗体的Load事件中,我们定义了一个变量x,然后调用第一个过程(A),注意到第7行中的参数列表中ByRef关键字,它代表传引用。

对于传引用,参数t 和 x其实就是一个变量。就像人有大名也可能有外号的道理一样。现在对于变量x,它的大名是x,外号是t。那么t-1其实就是x-1.最后打印出来的结果是x-1=1.

再看第10行,对于过程B,它的参数传递方式使用了ByVal关键字(即传值)

对于ByVal(传值),参数t和x根本就是不相关的两个变量。就如同两个人一样(以甲、乙为例),起初甲有两个苹果,然后甲告诉乙,你现在也有两个苹果了,于是乙乐呵呵的拿着两个苹果去过程B中,过程B的作用是将乙的苹果数减一,那么最后程序所要打印的是甲的苹果数,显然,苹果数2。根本没发生变化。那么有的朋友会问,这时乙的苹果数是1吧。答案是错的。对于变量,它是有生命周期的(在编程中叫做变量的作用域)。

上面的代码中,变量x的有效期从Form_Load事件激活开始,到End Sub(也就是这个事件结束时)为止。而变量t的有效期从过程的第一句开始,到End Sub为止。一旦超过这个有效期,变量的值就不复存在了。所以,如果想要打印出乙的苹果数,只能在使用该变量的过程中打印,超出这个过程对该变量的任何操作都是毫无意义的。


看完上面解析是不是有一种想测试的冲动? 您可以下载:

ByRef与ByVal关键字用法解析[Access软件网]
http://www.accessoft.com/article-show.asp?id=4302

 

 


Access软件网交流QQ群(群号:198465573)
 
 相关文章
ByRef与ByVal关键字用法解析  【江羽  2010/3/2】
【access小品】传递子窗体中选中记录;如何遍历用户选中的记录?...  【todaynew  2010/12/24】
按值传递与按地址传递   【风行  2012/9/22】
【Access示例】窗体间参数传递--OpenArgs  【杨雪  2016/7/5】
常见问答
技术分类
相关资源
文章搜索
关于作者

杨雪

文章分类

文章存档

友情链接