vb参数传递(传值byval与传址byref)

vb参数传递(传值byval与传址byref)

ID:18085822

大小:59.00 KB

页数:5页

时间:2018-09-13

vb参数传递(传值byval与传址byref)_第1页
vb参数传递(传值byval与传址byref)_第2页
vb参数传递(传值byval与传址byref)_第3页
vb参数传递(传值byval与传址byref)_第4页
vb参数传递(传值byval与传址byref)_第5页
资源描述:

《vb参数传递(传值byval与传址byref)》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、VB参数传递(传值ByVal与传址ByRef)在过程调用时,一般主调过程与被调过程之间有数据传递,即将主调过程的实参传递给被调过程的形参,完成实参与形参的结合,然后执行被调过程体,被调过程执行结束后返回主调程序,并根据所使用的参数传递方式,决定是否将被调过程的形参值返回给主调过程的实参。在VB中,实参与形参的结合有两种方式,即传值(ByVal)和传址(ByRef)。下面将采用图示方法,结合实例,对两种参数传递方式进行深人分析。1.传值方式(ByVal)。VB中的传值方式,实参与形参在内存中占用不同的内存单元,当调用一个过程时,系统把实参的

2、值复制一份给形参,实参与形参就断开了联系,被调过程中的操作是在形参自己的内存单元中进行,当过程调用结束时,形参所占用的内存单元同时被释放,调用过程中对形参值的改变对实参没有影响。因此,值传递方式又称为单向传递,即只能由实参传递给形参,形参的值不能返回给实参。在过程定义时,必须明确指定参数是按值传递的,在形参的前面加上关键字ByVal。(I)应用举例。采用值传递方式,编写交换两个数的过程Swap。分析能否真正实现两数互换Swap子过程:PublicSubSwap(ByValxAsInteger,ByValyAsInteger)DimtAsI

3、ntegert=x:x=y:y=tEndSub主调过程:PublicSubCommand1_Click()DimaAsInteger,bAsIntegera=10:b=20CallSwap(a,b)Print"A=";a,"B=";bEndSub执行程序,运行结果:A=10,B=20,并未实现a、b互换。2.传址方式(ByRef)。传址方式也称引用方式,是VB默认的参数传递方式,当调用一个过程时,系统将实参的地址传递给形参,实参与形参在内存中占用相同的存储单元。因此,被调过程中形参值发生变化,主调过程中实参值也会随之变化,这种传递方式是双

4、向的,也称双向传递。总之,传值时就是在内存中新开辟一个空间,将值赋给这个新开辟的空间,其生命周期为该函数调用结束时释放该空闲,计算结果不影响原调用数据内存空间的值。传址时同样新开辟一个空间,但不同的是将所用数据空间的内存地址存在新开辟的空间中,即指针,函数在数据处理过程中由于是指针,即对源数据进行操作,操作后结果影响原数据。什么时候用传值、传址,比较有用。求若干个数的最大公约数。OptionBase1PrivateFunctiongcd(ByValm%,ByValn%)AsIntegerIfm

5、odnIfr=0ThenExitDom=nn=rLoopgcd=nEndFunctionPrivateSubCommand1_Click()Dima()AsIntegern=InputBox("输入n")ReDima(n)Fori=1Ton'输入要求公约数的n个数a(i)=InputBox("输入数据")Nextin1=a(1)Fori=2Ton'n个数调用n-1次gcd函数过程求最大公约数m1=a(i)mn=gcd(m1,n1)Ifmn=1ThenExitForElsen1=mn'只要某次求得的最大公约数为1,不再往下求NextiPri

6、ntmn'显示n个数中的最大公约数EndSub计算乘幂Functionpower(xAsSingle,ByValyAsInteger)DimresultAsSingleresult=1DoWhiley>0result=result*xy=y-1Looppower=resultEndFunctionSubForm_Click()Fori=1To5r=power(5,i)PrintrNextiEndSub如果去掉ByVal,则结果而书中的结果不同,但解释是:过程Power中的参数y使用了关键字ByVal,因而事件过程可以顺利执行,5次循环分别

7、打印出5,5*5,5*5*5,…的值。但是,如果去掉参数y前面的关键字ByVal,则无法得到预期的结果。这是因为,第一次调用Power后,i被重新设置为0(参数y是i的地址),然后For语句使i加1,再开始循环。由于调用Power时总是将循环变量i设置为0,所以For循环将不会停止,产生溢出。在这种情况下,ByVal就不是可有可无的了。究竟什么时候用传值方式,什么时候用传地址方式,没有硬性规定,下面几条规则可供参考:(1)对于整型、长整型或单精度参数,如果不希望过程修改实参的值,则应加上关键字ByVal(值传送)。而为了提高效率,字符串和

8、数组应通过地址传送。此外,用户定义的类型(记录)和控件只能通过地址传送。(2)对于其他数据类型,包括双精度型、货币型和变体数据类型,可以用两种方式传送。经验证明,此类参数最好用传值方式传送,这

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。