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

  • 55
  • 0
  • 约2.93千字
  • 约 5页
  • 2017-02-28 发布于湖北
  • 举报
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)

1亿VIP精品文档

相关文档