Parameters/zh CN

From Lazarus wiki
Jump to: navigation, search

English (en) español (es) français (fr) 日本語 (ja) 中文(中国大陆)‎ (zh_CN)

4B - 参数传递 (原作者: Tao Yue, 状态: 未更改)

参数列表做为过程的一部分,允许传递参数给过程:

procedure 过程名 (参数组列表);

多个参数组间用分号分隔。

参数组1; 参数组2; ... ; 参数组n

参数组格式:

标识符1, 标识符2, ... , 标识符n : 数据类型

通过参数传递,以供过程使用这些参数,并且类型都与传递参数的相同。

procedure Name (a, b : integer; c, d : real);
begin
  a := 10;
  b := 2;
  writeln (a, b, c, d)
end;

传递参数给过程:

alpha := 30;
Name (alpha, 3, 4, 5);

在主程序中:

alpha值为30,之后,传递给过程中的a。

在过程中:

a重新赋值为10。实际发生的事情是,变量a和alpha值完全不同。

过程中的a赋值,并没有影响到主程序中的alpha变量。

这就是所谓的按值引用。


传递参数的另一种方式是按引用传递(按地址传递)。

按地址传递参数时,把实参变量的地址传送给被调用过程,形参和实参共用内存的同一地址。在被调用过程中,形参的值一旦改变,相应实参的值也跟着改变。

通过在参数组前加VAR关键字,实现按地址参数传递:

VAR 标识符1, 标识符2, ..., 标识符n : 数据类型;

常量和文本不能做为实际参数,因为它们可能在过程中被改变。

下面是按值按引用方式传递参数的示例:

procedure Name (a, b : integer; VAR c, d : integer);
begin
  c := 3;
  a := 5
end;
 
begin
  alpha := 1;
  gamma := 50;
  delta := 30;
  Name (alpha, 2, gamma, delta);
end.

程序运行后,gamma的值是3,因为c是按引用传递过来的参数,

alpha的值是1,因为它是按值传递过来的参数,看起来有点混乱。

按值传递参数,会复制一份传递过来的值,供过程使用。作用域只在过程中。

按地址传递参数,会使用同一变量值,相当于建立映射在同一内存地址。赋值操作会影响到外部对应变量。

按句话说: 按值传递参数,是单向的:主程序至过程。 按地址传递参数,是双向的。

上一页 目录 下一页