问题:编写一个交换两个变量值的程序。
此任务的特点是我们需要在过程中所做的更改才能为调用程序所知。
让我们尝试编写这样的程序:
var x, y: 整数;
<前>
程序交换(a,b:整数); // 有了这样的过程参数描述,
变量 c:整数;
begin // 将复制参数(x 和 y)的值
// 变量 a 和 b 是与 x 和 y 无关的自变量
c := 一个;
一个:=乙;
b := c;
结尾;
开始
x := 1;
y := 2;
交换(x,y); //变量x和y(参数)的值被复制到参数a和b中
writeln('x = ', x, ', y = ', y); // x=1, y=2
结尾。
如果你运行这个程序,你可以看到变量x和y的值没有改变。为了使参数改变参数的值,您必须使用通过引用传递数据。 为此,在数据类型的名称之后在子例程的标题中,您必须输入单词 var
<前>
过程 Swap(var a, b: integer); // 现在变量 a 和 b 得到变量 x 和 y 在内存中的地址
var c: 整数;
开始
c := 一个;
一个:=乙;
b := c;
结尾;
用法:如果您通过引用传递参数,那么在调用过程时只有变量名(不是数字也不是算术表达式)可以出现在这个地方!< br />
不要调用这样的过程:
<前>
交换(x,4);
交换(5+x, y);