delphi 参数传递 delphi 参数传递参数传递声明/ 实现一个过程使用的参数称为形式参数( 简称形参), 调用过程时传入的参数称为实际参数(简称实参)。{ Info 是形参} procedure ShowInfo(Info: String); begin ShowMessage(Info); end; var S: String; begin S := 'lxpbuaa'; {S 是实参} ShowInfo(S); end; 参数传递分两种:按值( by val )和引用( by ref ) 。这两种方式的本质区别是: 按值传递时,形参和实参是两个变量,它们开始时的值是相同的,即实参的数据被拷贝一份传递给了形参。所以此时, 形参的改变不会影响到实参。引用传递时, 形参和实参是同一个变量, 可以将它们之一看做是另一个的别名。所以此时,形参改变时,实参跟着改变。默认情况下, 参数是按值传递的, 传递的是数据拷贝; 如果加了 var 前缀,则成了引用传递。我们看如下例子: procedure (I: Integer); { 按值传递 I} begin ShowMessage(IntToStr(Integer(***@I))); { 取得形参所在地址。你会发现它和实参地址是不同的,因为此时实参和形参是不同的两个变量} I :=I+ 1; end; procedure (var I: Integer); { 引用传递 I} begin ShowMessage(IntToStr(Integer(***@I))); { 取得形参所在地址。你会发现它和实参地址是相同的,因为此时实参和形参是同一个变量}I :=I+ 1; end; procedure (Sender: TObject); var I: Integer; begin I := 1; ShowMessage(IntToStr(Integer(***@I))); { 取得实参所在地址} ByVal(I); {I =1} Showmessage(i); {i:=1; 实参没有变} ByRef(I); {I =2} showmessage(i); {i:=2, 实参改变了} end; 按值传递的参数可以指定默认值,比如上面的 ByVal 可以是这样: procedure ByVal(I: Integer = 0); 调用它时可以省掉有默认值的参数: ByVal 。带默认值的参数必须位于参数列表的最后,如: procedure ByVal(I: Integer = 0; B: Boolean); 是不行的,应该改为: procedure ByVal(B: Boolean; I: Integer = 0); 因为默认值必须是一个常数表达式,所以 dynamic-array 、 procedural 、 class 、 class-reference 和 interface 等参数只能指定 nil 默认值;而 record 、 variant 、 file 和 static-array 等类型的参数则根本不能指定默认值。如果按值传递一个指针类型的参数,情况会变得复杂而又很有意思。此时, 实际传递的是什么呢?是实际数据的拷贝吗?不, 是指针的拷
delphi参数传递 来自淘豆网m.daumloan.com转载请标明出处.