Difference between revisions of "Basic Pascal Tutorial/Chapter 4/Parameters/zh CN"

From Free Pascal wiki
Jump to navigationJump to search
(bypass [previously missed] redirect [cf. discussion])
(3 intermediate revisions by 2 users not shown)
Line 5: Line 5:
 
参数列表做为过程的一部分,允许传递参数给过程:
 
参数列表做为过程的一部分,允许传递参数给过程:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
procedure 过程名 (参数组列表);
 
procedure 过程名 (参数组列表);
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 19: Line 19:
 
通过参数传递,以供过程使用这些参数,并且类型都与传递参数的相同。
 
通过参数传递,以供过程使用这些参数,并且类型都与传递参数的相同。
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
procedure Name (a, b : integer; c, d : real);
 
procedure Name (a, b : integer; c, d : real);
 
begin
 
begin
Line 30: Line 30:
 
传递参数给过程:
 
传递参数给过程:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
alpha := 30;
 
alpha := 30;
 
Name (alpha, 3, 4, 5);
 
Name (alpha, 3, 4, 5);
Line 52: Line 52:
 
通过在参数组前加VAR关键字,实现按地址参数传递:
 
通过在参数组前加VAR关键字,实现按地址参数传递:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
VAR 标识符1, 标识符2, ..., 标识符n : 数据类型;
 
VAR 标识符1, 标识符2, ..., 标识符n : 数据类型;
 
</syntaxhighlight>
 
</syntaxhighlight>
Line 60: Line 60:
 
下面是''按值''、''按引用''方式传递参数的示例:
 
下面是''按值''、''按引用''方式传递参数的示例:
  
<syntaxhighlight>
+
<syntaxhighlight lang=pascal>
 
procedure Name (a, b : integer; VAR c, d : integer);
 
procedure Name (a, b : integer; VAR c, d : integer);
 
begin
 
begin
Line 88: Line 88:
  
 
{|style=color-backgroud="white" cellspacing="20"
 
{|style=color-backgroud="white" cellspacing="20"
|[[Procedures/zh_CN|上一页]]
+
|[[Basic Pascal Tutorial/Chapter 4/Procedures/zh_CN|上一页]]
|[[Contents/zh_CN|目录]]
+
|[[Basic Pascal Tutorial/Contents/zh CN|目录]]
|[[Functions/zh_CN|下一页]]
+
|[[Basic Pascal Tutorial/Chapter 4/Functions/zh_CN|下一页]]
 
|}
 
|}
 
 
[[Category:zh]]
 

Revision as of 14:37, 6 August 2022

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

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

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

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

上一页 目录 下一页