打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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

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参与计算。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
《Visual Basic程序设计(第4版)》第8章 过 程
VB.NET Function过程使用方法详解
VB Variant数据类型
VB几种函数参数传递方法,Variant,数组,Optional,ParamArray
Excel VBA入门(六)过程和函数
VB中的atn函数
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服