在帕斯卡中交换两个数字

Swap two numbers in pascal

我正在尝试交换两个值,但得到的是 Warning: Local variable "temp" does not seem to be initialized。我想做的和我做的一样。我正在使用 fpc Main.pas 从命令行编译它。我已经尝试将临时变量初始化为 0,但它仍然显示 Fatal: there were 3 errors compiling module, stopping.

'Main.pas'

Program Main;

procedure Main();
var
  n1, n2: Integer;
begin
  n1 := 5;
  n2 := 10;
  Swap(@n1, @n2);
  writeln('n1 = ', n1);
  writeln('n2 = ', n2);
end;

BEGIN
  Main();
END.

'Number.pas'

unit Number;

interface

type
  IntPtr = ^Integer;

procedure Swap(n1, n2: IntPtr);

implementation

procedure Swap(n1, n2: IntPtr);
var
  temp: Integer;
begin
  temp = n1^;
  n1^ = n2^;
  n2^ = temp;
end;

end.

正如您已经发现的那样,您混淆了赋值 (:=) 和相等 (=) 运算符。因此,

procedure Swap(A, B: PInteger);
var
  Temp: Integer;
begin
  Temp := A^;
  A^ := B^;
  B^ := Temp;
end;

其中 PInteger 定义为 ^Integer,执行以下操作:

Swap(@Val1, @Val2); // swaps integers Val1 and Val2

但是,我建议您稍微改变一下:

procedure Swap(var A, B: Integer);
var
  Temp: Integer;
begin
  Temp := A;
  A := B;
  B := Temp;
end;

使用 var 参数更加地道,它允许您简单地编写

Swap(Val1, Val2); // swaps integers Val1 and Val2

而且它还为您提供了更多的类型安全性。