VB考试教程:过程的使用之过程参数传递

VB考试教程:过程的使用之过程参数传递,第1张

VB考试教程:过程的使用之过程参数传递,第2张

2.过程参数转移

一个进程通常需要一些程序当前状态的信息来完成它的工作。程序的当前状态信息还包含调用过程时传递给过程的变量。当一个变量传递给一个过程时(完成了形参和实参的组合),这个变量就叫做参数。

(1)参数的数据类型

过程的参数类型默认为变量数据类型。但是,您也可以将参数声明为其他数据类型。例如:函数接受一个字符串变量和一个整数变量:

函数WhatForLunch(工作日为字符串,小时为整数)为字符串

如果WeekDay="Saturday "那么
WhatForLunch= " Fish "
ELse
WhatForLunch = " Chicken "
End If
如果Hour>2那么WhatForLunch = "对不起,太晚了!"

结束功能

(2)按地址传递参数。

按地址传递参数的过程(也称为“引用”)使进程通过变量的内存地址访问实际变量的内容。当变量被传递给过程时,变量的值可以在过程中被改变。通过地址传递参数是VB的默认设置。

如果为通过地址传递的参数指定数据类型,则必须将此类型的值传递给该参数。也可以将一个表达式传递给参数,VB根据所需类型计算表达式并将值传递给参数。

当通过地址传递变量时,对变量的任何修改都会传递给调用进程。地址参数调用在调用过程中修改变量有明显的优势,只是不要在过程中无意中修改变量。

例如,下面的子流程声明和调用:

子成本加利息(成本,合计)

成本=成本*1.05 '成本加5%
合计=Int(Cost)'然后取整数并返回

末端接头

调用:

……

Price = 100
Total = 0
costplus interest Price,Total
Print Price;“5%的利息是”;总数

在本例中,程序将两个地址变量传递给CostPlusInterest过程:Price和Total。程序员计划在后续的Print方法中使用更新后的Total变量,但是不小心忘记了在过程的中间步骤更新了Price变量,所以当程序运行时,结果如下:

5%的利息是105

没有达到预期的效果。

(3)按值传递参数。

避免上述问题的一个好方法是按值传递参数。通过值传递参数只会传递变量的副本。如果在流程执行过程中更改了该值,所有更改将只影响副本,而不会影响变量本身。使用ByVal关键字指示参数通过值传递。

例如,如果修改上面的示例,就不会出现上面的错误。修改如下:

子成本加利息(按价值计算的成本,合计)

当用ByVal声明成本参数时,将产生正确的结果:

利率为5%的100英镑等于105英镑

如果不想依赖ByVal关键字,还可以使用另一种方法来防止传递的变量被修改:将变量放在括号中,并将其转换为文字值。在上面的示例中,调用costplusinterest过程的语句是:

costplusinterest(价格),总计,

也可以得到正确的结果。

再举一个例子,有下面的代码:

选项显式

函数multiply(byval n as integer)as integer
multiply = 1
do while n > 0
multiply = multiply * n ' Find n!
n = n - 1
循环
结束函数

private Sub Form _ Click()
Dim sum As Integer,i As Integer
For i = 5比1 Step-1
sum = sum+Multiply(I)
Next
Print " sum = ";sum
End Sub

运行结果是153(5!+4!+3!+2!+1!)。

如果去掉函数的参数n前的“ByVal”,结果是120(5!),这显然不是编辑的本意,是错误的。

对于什么时候使用值传递方法,什么时候使用地址传递方法,没有硬性规定。以下规则可供参考:

1)对于整形、长整形或单精度参数,如果不希望进程修改自变量的值,就要加上关键字ByVal(按值传递)。为了提高效率,字符串和数组要通过地址来传递。此外,用户定义的类型(记录类型)和控件只能通过地址传输。

2)其他数据类型,包括双精度、货币和变量数据类型,可以通过两种方式传输。但经验证明,这样的参数是通过值来传递的,可以避免参数的误用。

3)如果不确定,通过值传递的方式传递所有变量(字符串、数组、记录类型变量除外)。程序写好能正确运行后,改变一些参数进行地址转移,加快运行速度。这样,即使删除了某个ByVal后程序无法正确运行,也很容易找到错误在哪里。

(4)使用可选参数。

VB提供了非常灵活和安全的参数传递方式,允许使用可选参数和可变参数。调用过程时,可以向过程传递可选参数或任意数量的参数。

在前面的例子中,一个过程的形参(形参)是固定的,调用时提供的实参(实参)也是固定的。也就是说,如果一个过程有三个形参,那么它必须用三个相同顺序和类型的实参来调用。

在VB中,可以指定一个或多个参数作为可选参数。比如我们设置了一个计算两个数乘积的过程,可以有选择地乘以第三个数。调用时,可以给它传递两个参数或三个参数。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » VB考试教程:过程的使用之过程参数传递

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情