参数传递 百科内容来自于: 百度百科

参数传递,是在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程,方法有按值传递参数,按地址传递参数和按数组传递参数。

定义

形参:指出现在SubFunction过程形参表中的变量名、数组名,该过程在被调用前,没有为它们分配内存,其作用是说明自变量的类型和形态以及在过程中的作用。形参可以是除定长字符串变量之外的合法变量名,也可以带括号的数组名。
实参:实参就是在调用Sub 和Function过程时,从主调过程传递给被调用过程的参数值。实参可以是变量名、数组名、常数或表达式。在过程调用传递参数时,形参与实参是按位置结合的,形参表和实参表中对应的变量名可以不必相同,但它们的数据类型、参数个数及位置必须一一对应。
两者关系
1. 形参只能是变量,实参可以是常量、变量或表达式。在被定义的函数中,必须指定形参的类型。
2. 实参与形参的个数应一样,类型应一致。字符型和整型可以互相通用。
3. 在调用函数时,如果实参是数组名,则传递给形参的是数组的首地址
4.实参传递给形参是单向传递,形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。调用结束后,将释放内存。执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中的实参的值。
5.形参如同公式中的符号,实参就是符号具体的值,在调用过程前必须得到赋值;调用过程就是实现形参与实参的结合,把实参的值通过调用传递给形参,相当于把值代入公式进行计算。

方法

按值传递参数
按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的值,不会影响实参变量本身,即实参变量保持调用前的值不变。按值传递参数时,需要在参数名前加"ByVal"关键字。
按地址传递参数
按地址传递参数时,把实参变量的地址传送给被调用过程,形参实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。如果实参是一个常数或表达式,Visual Basic 6.0会按"传值"方式来处理,按地址传递不需要"ByVal"关键字
数组传递参数
在VB6.0中,允许使用数组作为实参传递到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:
① 在实参和形参列表中只写数组名,忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分隔;
② 被调过程可分别通过LboundUbound函数确定实参数组的下界上界

用例

题目描述

调用带参数的函数

在调用函数时,您可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。
您可以发送任意多的参数,由逗号 (,) 分隔:
myFunction( argument1, argument2)
当您声明函数时,请把参数作为变量来声明:
function myFunction(var1,var2){这里是要执行的代码}
变量和参数必须以一致的顺序出现。第一个变量就是第一个被传递的参数的给定的值,以此类推。

实例

<button onclick="myFunction('Bill Gates','CEO')">点击这里</button><script>function myFunction(name,job){alert("Welcome " +name+ ", the " +job);}</script>

  
对于下述程序,试分析用传值、传地址、传数组方法传递参数时所得的打印结果。
PROGRAM SS(input,output);
VAR
A,B:integer;
PROCEDURE P(x,y,z:integer);
begin y:=y+1;z:=z+x;
end;
BEGIN
A:=2;b:=3;
P(A+B,A,A);
writeln (‘A=‘,A);
END
解答
(1) 传值:把实参的值计算出来传给形参。
在调用过程P时,形参x=5;y=2;z=2
出过程P时,形参x=5;y=3;z=7
这并不把结果回送到主程序,所以结果为A=2
(2) 传地址:实参计算出结果,把地址送形参。
设变量T=A+B(结果为5)。执行时把T、A、A的
地址(设为addr1,addr2,addr2)送给形参:
x=daar1,y=addr2,z=addr2。
T的地址addr1即x→T(5)
A的地址addr2即y→A(2)
A的地址addr2即z→A(2)
执行过程P即为:①y↑:=y↑+1;②z↑:=z↑+x↑
所以,①为A:=A+1=3
②为A:=A+T=8。 因此,最后A=8.
(3) 传数组:相当于执行 A:=2;B:=3; A:=A+1;A:=A+(A+B)
writeln(‘A=‘,A);
所以,结果为A=9。
$firstVoiceSent
- 来自原声例句
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定
小调查
请问您想要如何调整此模块?

感谢您的反馈,我们会尽快进行适当修改!
进来说说原因吧 确定