我目前正在尝试理解示例问题中的引用,值和名称传递。
exp = '1 + 1'
x = Function('return ' + exp)()
console.log(x)
给出的代码看起来像我应该显示n,A [1],A [2]的最终值,具体取决于它们的传递方式
procedure practice (x,y,z); interger x,y,z;
begin
y=1;
z=y-x;
end
我认为通过值传递将等同于原始值,因为它们保持不变但另外两个我无法理解发生了什么。
答案 0 :(得分:4)
procedure practice_by_value(x,y,z : integer);
在传递值中 - x,y,z是与A [1],n,A [2]分开的变量,但是得到相应A [1],n,A中的值的副本[ 2]。因此,由于它们是单独的变量,正如您所说 - 调用者中的变量,如果对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中的“名字传递”。
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