Basic Pascal Tutorial/Chapter 4/Parameters/zh CN

From Lazarus wiki
(Redirected from Parameters/zh CN)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

български (bg) 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,因为它是按值传递过来的参数,看起来有点混乱。

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

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

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

上一页 目录 下一页