按值/引用/结果传递
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.
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.