用pascal交换两个数字

用pascal交换两个数字,pascal,Pascal,我试图交换两个值,但得到一个警告:局部变量“temp”似乎未初始化。我想像以前那样做。我使用fpc Main.pas从命令行编译它。我尝试将temp变量初始化为0,但它仍然显示致命:编译模块时出现3个错误,正在停止 “Main.pas” Program Main; procedure Main(); var n1, n2: Integer; begin n1 := 5; n2 := 10; Swap(@n1, @n2); writeln('n1 = ', n1); wr

我试图交换两个值,但得到一个
警告:局部变量“temp”似乎未初始化。我想像以前那样做。我使用fpc Main.pas从命令行编译它。我尝试将temp变量初始化为0,但它仍然显示
致命:编译模块时出现3个错误,正在停止

“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.
“号码,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

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

不应该是
:=
而不是
=
?谢谢