1. 形参与实参
函数声明及定义时形参项中声明的变量或者常量叫做形参。
函数调用时,每个形参的位置填入的实际值叫做实参。
2. 参数的传递
(1) 传址方式:
例程中以Var关键字声明的参数以传址方式传递。这种方式传递的参数,若形参的值发生变化,实参的值也发生变化。
若以传址方式传入的参数在函数定义时对其赋值,则此传入的参数必须为能够赋值的变量或者表达式,决不能是常量。
但是也有两种情况例外:
---> 当一个对象类型的常量传入例程时,对象的属性可以被改变
---> 当开启了{$J+}开关时,常量与变量无甚区别,此时也可将常量传入。
注: 下文中的out参数也有此规定
(2) 传值方式:
在声明参数时,若未加任何关键字,则此参数采用传值方式传递。此种方式传递的参数在例程运行期间其值也可发生改变,
与传址方式不同的是,这种改变不会影响的原来的变量(即实参)。实际上,系统会在参数传递前将参数复制一份,然后将复制
得到的新变量传递给例程,例程结束后,此新变量被销毁。
(3) 常量方式:
以常量方式传递的参数以Const声明。可以说Const方式是4种方式中的最简单的一个。此种方式传递的参数无论任何时候
都不允许发生改变。若调用时强制改变其值,会发生编译错误。
不过若将一个对象引用或者指针以const方式做参数传入时,我们依然可以改变对象的属性值或者字段值,也可以
改变指针指向的变量值。但指针所指向的地址不能改变。
在万一老师的大作中,提及使用此方式传递参数会大大提高运算效率。
(4) 输出方式:
以 out 关键字声明的参数将以输出的方式传递。这种方式可以让例程返回多个值。这种特性使out参数在编写Com
程序时非常方便。
就使用上而言,var 参数与 out 参数完全一样,唯一的区别在于:将一个变量作为out 参数传入例程前,系统会自动
清空变量原来的值,而var 参数没有这种处理。
3. 默认参数
语法格式为:
procedure 名称(……;var 默认参数名:类型 = 默认值);
默认参数的几点说明:
(1) 只有直接常量才能指定给参数作为默认值
(2) 记录、变体、文件、静态数组、对象类型均不能指定默认值
(3) 动态数组、例程类型、类、类引用、接口只能指定nil 作为其默认值
(4) 当参数表中的某一参数被指定了默认值,则此参数后的所有参数都须指定默认值
(5) 当某个参数项中含有多个参数名,则此参数项不能指定默认值。
例如: procedure simple(var a,b:integer=1); 是错误的表达
(6) 当某个例程类型中指定了默认参数时,这些默认参数将掩盖具体函数中的默认值。