一、概念的理解
1、参数传递:在使用函数时,要填入与函数形式参数个数相同的实际参数(有默认参数的除外),在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据的处理和返回。
2、 形式参数:定义函数时函数名后面括号中的变量名;实际参数:调用函数时函数名后面括号中的表达式。通常情况下,我们将Sub或Function过程中定义的参数称为形式参数;而调用Sub或Function时的参数称为实际参数,简称实参。
说明 1. 形参只能是变量,实参可以是常量、变量或表达式。在被定义的函数中,必须指定形参的类型。
2. 实参与形参的个数应一样,类型应一致。字符型和整型可以互相通用。
3. 在调用函数时,如果实参是数组名,则传递给形参的是数组的首地址
4.实参传递给形参是单向传递,形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。调用结束后,将释放内存。执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中的实参的值。
二、通过两个实例来说明一下按值传递与按地址传递的不同
1、通常,过程定义时,若形参名前面设置有关键字“Byval”,则指定它所对应的实参是按值传递的。在实参调用过程时,VB给形参分配一个临时存储单元,将实参变量的值复制到这个临时单元中。也就是说,按值传递参数时,传递的只是实参变量的副本,过程对形参的任何改变只在过程内部有效,不会影响实参变量本身。换句话说,一旦过程运行结束,对应的实参变量保持调用前的值不变。
2、过程定义时,若形参名前面没有关键字“Byval”,即缺省修饰词,或有Byref关键字时,则指定它是一个按地址传递的参数。按地址传递参数时,形参和实参公用内存的同一“地址”。因此,被调用过程中对形参的任何操作都变成对相应实参的操作,实参的值就会随过程体内对形参的改变而实时改变。
3、 通常实参是变量形式,则参数的传递方式完全由前面形参的前缀Byval,Byref决定,但当实参是常量、表达式形式,系统是强制按值方式传递参数;实参是数组、对象形式,系统是强制按地址方式传递参数,与其对应形参前缀设置无关。
三、选用参数传递的原则
一般来说,按地址传递要比按值传递参数更节省内存,效率更高,因为系统不必再为形参分配内存、再把实参的值拷贝给它。对于字符串型和数组参数,这种效率尤其显著。
选用参数传递方式的原则如下:
(1)如果要将过程中的结果通过形参返回给主调程序,则形参必须是按地址传递。这时实参必须是同类型的变量名,不能为常量或表达式。
(2)如果实参的作用仅仅是将其值单向传给形参,但并不想让过程体内对形参的改变来影响实参,这时形参一般应选用传值方式。这样可增加程序的可靠性,便于调试,减少各过程间的关联。