定义:
形参:指出现在
Sub 和
Function过程形参表中的变量名、数组名,该过程在被
调用前,没有为它们分配内存,其作用是说明自变量的类型和形态以及在过程中的作用。形参可以是除定长字符串变量之外的合法变量名,也可以带括号的数组名。
实参:实参就是在调用Sub 和Function过程时,从主调过程传递给被调用过程的参数值。实参可以是变量名、数组名、常数或表达式。在过程调用传递参数时,形参与实参是按位置结合的,形参表和实参表中对应的变量名可以不必相同,但它们的数据类型、参数个数及位置必须一一对应。
[1]
两者关系:
1. 形参只能是
变量,实参可以是
常量、变量或
表达式。在被定义的函数中,必须指定形参的类型。
2. 实参与形参的个数应一样,类型应一致。字符型和整型可以互相通用。
3. 在调用函数时,如果实参是数组名,则传递给形参的是数组的首地址
4.实参传递给形参是单向传递,形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。调用结束后,将释放内存。执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中的实参的值。
[2]
5.形参如同公式中的符号,实参就是符号具体的值,在调用过程前必须得到
赋值;调用过程就是实现形参与实参的结合,把实参的值通过调用传递给形参,相当于把值代入公式进行计算。
实现方法:
1、按值传递参数:
按值传递参数时,是将实参变量的值复制一个到临时
存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。按值传递参数时,需要在参数名前加"ByVal"关键字。
2、按地址传递参数:
按地址传递参数时,把实参变量的地址传送给被调用过程,
形参和
实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。如果实参是一个常数或表达式,
Visual
Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"
关键字。
[3]
3、按数组传递参数:
在VB6.0中,允许使用
数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:
① 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是
多维数组,每维以逗号分隔;
遇到问题:
如图片所示:
上面代码来发送消息,在栈上传递地址(待验证....)
------------------------------------------------------------------------------------------------------------
下面代码来接受参数:
问题原因:
传递地址有问题;
解决办法:
直接传递值,就够用;
------------------------------------------------------------------------------------------------------------
c++参数传递,古老的榕树,5-wow.com