用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
而且它还为您提供了更多的类型安全性。不应该是:=
而不是=
?谢谢