难以理解按引用、值和名称传递
Trouble understanding pass by reference, value and name
我目前正在尝试理解示例问题中的引用传递、值和名称。
procedure practice (x,y,z); interger x,y,z;
begin
y=1;
z=y-x;
end
给出的代码看起来像,我应该根据它们的传递方式显示 n、A[1]、A[2] 的最终值
A[1] := 1;
A[2] := 2;
n = 2;
practice (A[1], n, A[n]);
我相信按值传递的值等同于原始值,因为它们保持不变,但其他两个我很难理解会发生什么。
procedure practice_by_value(x,y,z : integer);
在按值传递中 - x、y、z 是与 A[1]、n、A[2] 分开的变量,但确实获得了相应 A[1]、n、 A2]。因此,由于它们是单独的变量,正如您所说 - 如果对 x、y 或 z 进行了更改,调用者 A[1]、n、A[2] 中的变量将保持不变。
procedure practice_by_reference(var x,y,z : integer);
通过引用传递 - x、y、z 成为 A[1]、n、A[2] 的化名或别名。对 x、y、z 的任何操作都与对 A[1]、n 或 A[2] 执行的操作相同。因此,如果您在过程中修改 x、y、z,实际上是在修改调用方中的 A[1]、n、A[2]。
我不熟悉 Pascal 中的"pass by name"。
var
A : array[1.. 10] of integer;
n :integer;
procedure practice_by_value (x,y,z : integer);
begin
y := 1;
z := y-x;
end; { practice_by_value }
procedure practice_by_reference(var x,y,z : integer);
begin
y := 1;
z := y-x;
end;
begin
A[1] := 1;
A[2] := 2;
n := 2;
practice_by_value (A[1], n, A[n]);
writeln('after pass by value: ',A[1],' ',n,' ',A[2]);
practice_by_reference(A[1],n,A[n]);
writeln('after pass by reference : ',A[1],' ',n,' ',A[2]);
end.
after pass by value: 1 2 2
after pass by reference: 1 1 0
我目前正在尝试理解示例问题中的引用传递、值和名称。
procedure practice (x,y,z); interger x,y,z;
begin
y=1;
z=y-x;
end
给出的代码看起来像,我应该根据它们的传递方式显示 n、A[1]、A[2] 的最终值
A[1] := 1;
A[2] := 2;
n = 2;
practice (A[1], n, A[n]);
我相信按值传递的值等同于原始值,因为它们保持不变,但其他两个我很难理解会发生什么。
procedure practice_by_value(x,y,z : integer);
在按值传递中 - x、y、z 是与 A[1]、n、A[2] 分开的变量,但确实获得了相应 A[1]、n、 A2]。因此,由于它们是单独的变量,正如您所说 - 如果对 x、y 或 z 进行了更改,调用者 A[1]、n、A[2] 中的变量将保持不变。
procedure practice_by_reference(var x,y,z : integer);
通过引用传递 - x、y、z 成为 A[1]、n、A[2] 的化名或别名。对 x、y、z 的任何操作都与对 A[1]、n 或 A[2] 执行的操作相同。因此,如果您在过程中修改 x、y、z,实际上是在修改调用方中的 A[1]、n、A[2]。
我不熟悉 Pascal 中的"pass by name"。
var
A : array[1.. 10] of integer;
n :integer;
procedure practice_by_value (x,y,z : integer);
begin
y := 1;
z := y-x;
end; { practice_by_value }
procedure practice_by_reference(var x,y,z : integer);
begin
y := 1;
z := y-x;
end;
begin
A[1] := 1;
A[2] := 2;
n := 2;
practice_by_value (A[1], n, A[n]);
writeln('after pass by value: ',A[1],' ',n,' ',A[2]);
practice_by_reference(A[1],n,A[n]);
writeln('after pass by reference : ',A[1],' ',n,' ',A[2]);
end.
after pass by value: 1 2 2
after pass by reference: 1 1 0