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