0

所以我有这段帕斯卡代码:

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'打印由空格分隔的数组元素,然后打印一个新行,并且对于一个整数它只打印它)

而且我试图了解如果函数调用是通过值结果或通过引用,输出会有多么不同。

显然,如果它只是按值,很容易看出该过程不会对实际参数产生任何影响,即输出(按值)应该是:5 10 3 5 10 3。

我认为,如果它是价值结果,至少是第一次迭代:12 12 12。在引用的情况下,我感到困惑。那会是什么?

4

1 回答 1

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.
  • X : 按值调用
  • Y : 通过引用调用
  • Z : 常量调用

这个程序的输出应该是10 15.

通过声明Z为常量参数,您向编译器承诺您不会更改该值。以下过程变体在编译时应该会出错。

PROCEDURE TestProc(X : Integer; VAR Y : Integer; CONST Z : Integer);

BEGIN
   X := X + Z;
   Y := Y + Z;
   Z := Z + 1;
END;
于 2014-11-23T16:57:18.820 回答