参数传递

1. 值参数
  将参数以值的形式传递是默认的传递方式一个参数以值的形式传递意味着创建这个变量的本地副本,
过程和函数对副本进行运算,看下面的例子:当用这种方法调用一个过程时,一个字符串的副本就被创
建,Foo()将对副本s进行运算,这表示对这个副本的任何修改都不会影响到原来的变量。

2. 引用参数
    Pascal允许通过引用把变量传递给函数和过程。通过引用传递的参数有时又被称为变量参数,通过
引用传递意味着接收变量的函数和过程能够改变变量的值。为了通过引用传递变量,在过程或函数的参
数表中用关键字 var 不同于复制 x,关键字 var 使得变量的地址被复制,因此变量值就能被直接改变。
用 var 的参数就像在 C++ 中用 & 运算符通过引用传递变量一样。关键字 var 把变量的地址传递给函数
和过程,而不是把变量的值传递过去。

3. 常量参数
    如果不想使传递给函数或过程的参数被改变,就用 const 关键字来声明它。关键字 const 不仅保
护了变量的值不被修改,而且对于传递给函数或过程的字符串和记录来说能产生更优化的代码,下面的
代码就是一个过程声明接收一个字符串常量参数:

4. out
    使用关键字 out 时,不管传进的是什么值,都会被清空,过后,掉用函数在使用 out 时,此值就
会发生变化。例如:

procedure A;
var
  i: Integer;
begin
  i := 1;
  ShowMessage(IntToStr(i));  //此时显示结果是1
  B(i);
  ShowMessage(IntToStr(i));  //此时显示结果是2,因为调用了函数B
end;

procedure B(out j: Integer);
begin
  ShowMessage(IntToStr(j));  //此时不会显示1,因为使用了out,j中的是数值不是1,而是清空为0了
  B := B + 2;
  ShowMessage(IntToStr(j));  //此时显示结果为2,并且程序流程回到A函数时,i也会被改变为2 
end;

出处:delphi 5开发人员指南 第2章


 

原文地址:https://www.cnblogs.com/spiritofcloud/p/3898351.html