VB:参数传递之“传址”与“传值”的区别(胡⼦VB教学资料)
━━━━━━━━━━━━━━━━━━━━━━━━━━
在vb中调⽤函数或过程,传递参数都有两种⽅式——传址和传值。其中VB默认是以传址⽅式传递参数。
ByRef m As Integer 表⽰参数m以传址⽅式传递给函数或过程
ByVal m As Integer 表⽰参数m以传值⽅式传递给函数或过程
因为vb默认的是传址⽅式,所以在代码中 ByRef 关键字⼀般可以省略。但在API中往往是不会省略的。
从概念上来讲,好像传址和传值⽐较容易理解:传址就是把⼀个存放数据的内存地址传给函数或过程;⽽传值则是把⼀个具体的数据传递给函数或过程。
但在实际应⽤中两种传递参数的⽅式有什么不同,对程序的运算有何影响,很多⼈就不太容易说清楚了。如果不清楚⼆者之间的区别,可能会得到与你的期望不同的值,系统也不会弹出错误信息,你也不出错误(因为代码本来就没有错误)。
下⾯的这个实例中定义了两个相同运算的函数 test1 和 test2 ,所不同的是 test1 接收的是⼀个以传址⽅式( ByRef )传递的参数m;⽽ test2 接收的是⼀个以传值(ByVal)⽅式传递的参数m。
Option Explicit
Function test1(ByRef m As Integer) As Integer '定义⼀个以传址⽅式传递参数(VB默认)的函数
m = m * 3
test1 = m '返回运算结果m
End Function
Function test2(ByVal m As Integer) As Integer '定义⼀个以传值⽅式传递参数的函数
m = m * 3
test2 = m '返回运算结果m
End Function
Private Sub Command1_Click()
Dim i As Integer
i = Val(Text1.Text)
Text2 = test1(i) '传递参数给test1函数(传址,VB默认⽅式),并取返回值
Text3 = i '显⽰函数运算后的参数当前值
End Sub
vb所有代码Private Sub Command2_Click()
Dim i As Integer
i = Val(Text1.Text)
Text2 = test2(i) '传递参数给test2函数(传值),并取返回值
Text3 = i '显⽰函数运算后的参数当前值
End Sub
Private Sub Text1_GotFocus()
Text1 = ""
Text2 = ""
Text3 = ""
End Sub
实例分析:
1、两个函数的中的运算完全相同,都是对参数进⾏乘3的运算,返回值也完全相同。
2、请注意:假如我们输⼊⼀个参数2, 经过函数运算以后,我们再显⽰⼀下参数的值,就会看到区别:在参数以传址⽅式传递给函数后,经过m=m*3 的运算后,这个参数的地址中的值也发⽣了变化,所以当前参数就不再是第⼀次传⼊时的值2了,⽽是6 。这就意味着,在后⾯的计算中,m将以新值6参与运算。
⽽以传值⽅式传递参数,在经过函数运算后,参数的值仍然保持第⼀次传⼊时的值,仍然是2 ,也就是说,在后⾯的运算中,m仍然以第⼀次传⼊时的值2参与计算。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论