VB参数传递(传值ByVal与传址ByRef)..docVIP

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
VB参数传递(传值ByVal与传址ByRef).

VB参数传递(传值ByVal与传址ByRef) 在过程调用时,一般主调过程与被调过程之间有数据传递,即将主调过程的实参传递给被调过程的形参,完成实参与形参的结合,然后执行被调过程体,被调过程执行结束后返回主调程序,并根据所使用的参数传递方式,决定是否将被调过程的形参值返回给主调过程的实参。在VB中,实参与形参的结合有两种方式,即传值(ByVal)和传址(ByRef)。下面将采用图示方法,结合实例,对两种参数传递方式进行深人分析。 1.传值方式(ByVal)。 VB中的传值方式,实参与形参在内存中占用不同的内存单元,当调用一个过程时,系统把实参的值复制一份给形参,实参与形参就断开了联系,被调过程中的操作是在形参自己的内存单元中进行,当过程调用结束时,形参所占用的内存单元同时被释放,调用过程中对形参值的改变对实参没有影响。因此,值传递方式又称为单向传递,即只能由实参传递给形参,形参的值不能返回给实参。在过程定义时,必须明确指定参数是按值传递的,在形参的前面加上关键字 ByVal。 (I)应用举例。 采用值传递方式,编写交换两个数的过程Swap。分析能否真正实现两数互换 Swap 子过程: Public Sub Swap( ByVal x As Integer, ByVal y As Integer) Dim t As Integer t=x :x=y :y=t End Sub 主调过程: Public Sub Command1_Click ( ) Dim a As Integer,b As Integer a=10 :b=20 Call Swap(a,b) Print A=;a, B= ;b End Sub 执行程序,运行结果:A = 10,B =20,并未实现a、 b互换。 2.传址方式(ByRef)。 传址方式也称引用方式,是VB默认的参数传递方式,当调用一个过程时,系统将实参的地址传递给形参,实参与形参在内存中占用相同的存储单元。因此,被调过程中形参值发生变化,主调过程中实参值也会随之变化,这种传递方式是双向的,也称双向传递。 总之,传值时就是在内存中新开辟一个空间,将值赋给这个新开辟的空间,其生命周期为该函数调用结束时释放该空闲,计算结果不影响原调用数据内存空间的值。传址时同样新开辟一个空间,但不同的是将所用数据空间的内存地址存在新开辟的空间中,即指针,函数在数据处理过程中由于是指针,即对源数据进行操作,操作后结果影响原数据。 Option Base 1 Private Function gcd(ByVal m%, ByVal n%) As Integer If m n Then t = m: m = n: n = t Do r = m Mod n If r = 0 Then Exit Do m = n n = r Loop gcd = n End Function Private Sub Command1_Click() Dim a() As Integer n = InputBox(输入n) ReDim a(n) For i = 1 To n 输入要求公约数的n个数 a(i) = InputBox(输入数据) Next i n1 = a(1) For i = 2 To n n个数调用n-1次gcd函数过程求最大公约数 m1 = a(i) mn = gcd(m1, n1) If mn = 1 Then Exit For Else n1 = mn 只要某次求得的最大公约数为1,不再往下求 Next i Print mn 显示n个数中的最大公约数 End Sub Function power (x As Single, ByVal y As Integer) Dim result As Single result = 1 Do While y 0 result = result * x y = y - 1 Loop power = result End Function Sub Form_Click() For i = 1 To 5 r = power(5,i) Print r Next i End Sub 如果去掉 ByVal,则结果 而 书中的结果不同,但解释是: 过程Power中的参数y使用了关键字ByVal,因而事件过程可以顺利执行,5次循环分别打印出5,5 * 5,5 * 5 * 5,…的值。但是,如果去掉参数y前面的关

文档评论(0)

sa1fs5g1xc1I + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档