所以我有这段Pascal代码:
program P;
var a: array [1..2] of Integer;
var i :Integer;
var k :Integer;
procedure update(x,y,z: Integer);
begin
x := x+1;
y := x*2;
x := y;
k := x;
end
begin
a[1] := 5; a[2] := 10;
k := 3;
for i:=1 to 2 do
begin
update(a[i],a[2],k);
print(a);
print(k)
end
end.
(假设' print'打印以空格分隔的数组元素,然后打印一个新行,也打印一个整数,只打印它)
我试图了解函数调用是通过value-result还是通过引用输出的不同。
显然,如果只是按值,很容易判断程序对实际参数没有任何影响,即输出(按值)应为:5 10 3 5 10 3。我认为,如果它是价值结果,它至少会是第一次迭代:12 12 12。 在引用的情况下,我感到困惑。 会是什么?
答案 0 :(得分:1)
您尚未声明任何变量参数。变量K
将被更改,但在此上下文中不会计算,通常被视为不良做法。
PROGRAM ParamTest;
VAR
A, B : Integer;
PROCEDURE TestProc(X : Integer; VAR Y : Integer; CONST Z : Integer);
BEGIN
X := X + Z;
Y := Y + Z;
END;
BEGIN
A := 10;
B := 10;
TestProc(A, B, 5);
WriteLn(A, ' ', B);
END.
该程序的输出应为10 15
。
将Z
声明为常量参数后,您向编译器保证不会更改该值。以下过程变体应在编译时出错。
PROCEDURE TestProc(X : Integer; VAR Y : Integer; CONST Z : Integer);
BEGIN
X := X + Z;
Y := Y + Z;
Z := Z + 1;
END;