按值/引用/结果传递

pass by value/ reference / result

procedure p(x : integer); 
begin
  a := 5;
  x := x + 2; 
end

执行以下代码后记下变量a的值:

a := 10;
p(a);

对于以下每个参数传递机制:

(i) 按值调用。一种。 7,10

(ii) 通过引用调用。一种。 12,12

(iii) 按值-结果调用。一种。 7,7

下周要考试,我已经拿到了模拟试卷的答案,但我对在过程调用中如何将 X 分配给 a 感到困惑。帮助会很棒

谢谢

(i) call by value

传递给 p() 的任何值都会复制 到 p() 的堆栈上。 copy 用于 p() 的主体,因此原始值永远不会改变。如果 a 以 7 开始,它将以 7 结束。

(ii) call by reference

为p()提供了对原始值的引用,使得引用指向的值的变化影响到原始变量。 a 将在 p() returns 之后有一个新值。

如果a以12开始,它将以7结束,因为它首先在p()的主体中赋值为5,然后该值增加2。

(iii) call by value-result

这类似于通过引用调用,只是在形参和实参之间没有创建别名。 See details.