按值传递与按地址传递 -杜小杰
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


按值传递与按地址传递

发表时间:2012/9/22 9:10:01 评论(0) 浏览(9445)  评论 | 加入收藏 | 复制
   
摘 要:在调用一个有参数的过程时,首先进行的是形式参数与实在参数的结合,实现调用过程的实在参数与被调用过程的形式参数之间的数据传递。数据传递方式有两种方式:按值传递与按地址传递。
正 文:

1. 按值传递参数

  按值传递参数时,是将实在参数的值复制一个形式参数中,如果在调用过程中改变了形式参数的值,不会影响实在参数本身,即实在参数保持调用前的值不变。

按值传递参数方法是在形式参数前加上ByVal,如:Sub S1(ByVal a As Integer,ByVal b As integer) ;另外一些特别情况也是按值传递参数,如实在参数是常数、表达式时; 对于实在参数是变量时,只要在其左右加上圆括号,如 Call Sub1((x),(y))。

2.按地址传递参数

  按地址传递参数时,把实在参数的地址传送给被调用过程,形式参数和实在参数共用内存的同一地址。在被调用过程中,形式参数的值一旦改变,相应实参的值也跟着改变。

按地址传递参数方法是在形式参数前加上ByRef,或形式参数前为空,如:Sub S1([ByRef] a As Integer,[ByRef] b As integer) ;形参数组只能按地址传递参数。

举例1

Private Sub Form_Click()
Dim a As Integer, b As Integer
a = 10: b = 25
Call sub1(a, b)
Print a, b
End Sub

Private Sub sub1(ByVal m As Integer, ByVal n As Integer)
Dim temp As Integer
temp = m
m = n
n = temp
Print m, n, temp
End Sub

运行结果是:

在窗体第一行显示:25 10 10

在窗体第二行显示:10 25

见下图:

举例2

Private Sub Form_Click()
Dim a As Integer, b As Integer
a = 10: b = 25
Call sub1(a, b)
Print a, b
End Sub

Private Sub sub1(ByVal m As Integer, n As Integer)
Dim temp As Integer
temp = m
m = n
n = temp
Print m, n, temp
End Sub

运行结果是:

在窗体第一行显示:25 10 10

在窗体第二行显示:10 10

见下图:

举例3

Private Sub Form_Click()
Dim a As Integer, b As Integer
a = 10: b = 25
Call sub1(a, b)
Print a, b
End Sub

Private Sub sub1(m As Integer, ByVal n As Integer)
Dim temp As Integer
temp = m
m = n
n = temp
Print m, n, temp
End Sub
运行结果是:

在窗体第一行显示:25 10 10

在窗体第二行显示:25 25

见下图:

举例4

Private Sub Form_Click()
Dim a As Integer, b As Integer
a = 10: b = 25
Call sub1(a, b)
Print a, b
End Sub

Private Sub sub1(m As Integer, n As Integer)
Dim temp As Integer
temp = m
m = n
n = temp
Print m, n, temp
End Sub
运行结果是:

在窗体第一行显示:25 10 10

在窗体第二行显示:25 10

见下图:

举例5
Private Sub Form_Click()
Dim a As Integer, b As Integer
a = 20: b = 50
p1 a, b
p2 a, b
p3 a, b
Print "a="; a, "b="; b
End Sub

Private Sub p1(x As Integer, ByVal y As Integer)
x = x + 10
y = y + 20
End Sub

Private Sub p2(ByVal x As Integer, y As Integer)
x = x + 10
y = y + 20
End Sub

Private Sub p3(ByVal x As Integer, ByVal y As Integer)
x = x + 10
y = y + 20
End Sub

运行结果是:

在窗体上显示:a= 30 b=70

见下图:


Access软件网交流QQ群(群号:198465573)
 
 相关文章
带参数调用SQL Server中的存储过程并返回值  【UMVsoft整理  2008/6/4】
Public与Private的区别,Sub与Private Sub...  【竹笛  2010/9/6】
"缺少变量或过程,不是模块"的原因及解决方法  【宏鹏(转载)  2012/5/23】
VBA过程的调用(含过程名称为变量时的方法)  【王度兰亭  2012/7/7】
常见问答
技术分类
相关资源
文章搜索
关于作者

杜小杰

文章分类

文章存档

友情链接