Delphi 2010学习笔记(19)---例程参数---2011-01-21

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) 当某个例程类型中指定了默认参数时,这些默认参数将掩盖具体函数中的默认值。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值