
参数传递,是在程序运行过程中,实际参数就会将参数值传递给相应的形式参数,然后在函数中实现对数据处理和返回的过程,方法有按值传递参数,按地址传来自递参数和按数组传递参数。
- 中文名 参数传递
- 外文名 ParameterPassing
- 方法 值传递,地址传递,数组传递
定义
考宗马月失内安另顺 形参:指出现在Sub 和Function过程形参表中的变量名、数组名,该过程在被调用前,没有为它们分配内存,其作用是说明自变量的类型和形态以及在过程中的作用。形参可以是除定长字符串变量来自之外的合法变量名,也可以带括号的数组名。
实参:实参就是在调用Sub 360百科和Function过程时,从主调过程传递给被调用过程的参数值。实参可以是变量名、数组名、常数或表达式。在过程调用传递参数时,形参与实参是按位置结合的,形参表和实参表中对应的变量名可以不必相同,但它们的奏普铁气超聚年凯数据类型、参数个数及位置必须一一对应。
两者关系:
1. 形参只药速能是变量,实参可以是常量、变量或表达式。在被定义的函数中,必须指定形参的类型。
2. 实参与形议法触仍盐留参的个数应一样,类型应一致。字符型和整型可以互相通用。
3. 在调用函数时,如果实参是数组名,则传递给形参的是数组的首地址
4.实参传递给形参是单向传递,形参变量在未出现函数调用时,并不占用内存,只在调用时才占用。调用结束后,将释放内存。执行一个被调用函数时,形参的值如果发生改变,并不会改变主调函数中的实参的值。
5.形参如同公式中的符号,实参就是符号具体的值,在调用过程前必须得到赋值;调用过程就是实现形参与实参的结合,把实参的值通过调用传递给形参,相当于把值代入公式进行计算。
方法
按值传递参数
按值传递参数时,是将实参变量的值复制一个到临时存储单元中,如果在调用过程中改变了形参的角调图市宁值,不会影响实参变量款统底置本身,即实参变量保持调用前的值不变。按值传递参数时,需要在参数名前加"ByVal"关键字。
按地址传递参数
按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。如果实参是一个常数或表达式,Visual Bas怕松它验卷山ic 6.0会按"传值"方式来处理,按责吃地址传递不需要"ByVal"关键字。
按数组传递参数
在VB6.0中,允许使用数组作为实参传递八到子过程的形参中,数组传递必须采用地址传递的方式来传递参数。数组参数在传递时应注意以下两个方面:
① 提伯完少在实参和形参列表中只写数组名,临修忽略维数的定义,但圆括号不能省,当数组作为参数传递时,系统将实参数组的起始地址传给过程,使形参数组也具有与实参数组相同的起始地址,若参数是多维数组,每维以逗号分波磁盟势完概流青隔;
② 被调过程可分别通过Lbound和Ubound函数确定实参数组的下界和上界。
用例
题目描述
调用参数函数
在来自调用函数时,您可以向其传递值,这些值被称为参数。
这些参数可以在函数中使用。
您可以发送任意多的参数,由逗号 (,) 分隔:
360百科myFunction(argument1,argument2)
当您声万速换打格宁际短此眼明函数时,请把参数作为变量来声明:
fu肉至用念历孩连棉终总nction myFunction(var1,var2){这里是要执行的代码}
变量和参数必须以一致的顺序出现。第一个变量就是卫拉宣而第一个被传递的参数严混保劳后怕的给定的值,以此类推。
实引既此概想请例
<button "myFunction('B李居审志统没轴牛庆八九ill 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);
wri福无哪足验固距操聚teln ('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。