使用引用调用时被调用者和调用者的值
value of callee and caller when using call by references
我遇到了一个困惑,当我通过引用将变量 x 传递给变量 y 时,x 和 y 现在应该指向相同的位置,但我得到的输出并不相同。
完整的详细讨论在这里: http://gateoverflow.in/94182/programming-output
我已经尽力向用户解释了这些东西,但我仍然无法完全说服他,也许我缺乏一些概念。
粗略的代码示例:
var b : int;
procedure M (var a, int)
begin
a= a*a;
print(a);
end;
procedure N
begin
b= b+1;
M(b);
end;
begin
b=12;
N;
print(b);
end;
我假设所讨论的变量是静态的,因此 a b 的值不应从 13 改变,但 a 的值应为 13*13=169 ,但我的推理与什么相反参考调用是关于。
pascal 代码来自未经授权的书,请抛出一些见解。
我不得不复习范围界定术语。我自己对静态和动态范围界定感到困惑。所有现代编程语言都使用静态作用域。我得出结论,a 和 b 在各自的打印语句中的值都应为 169。
我遇到了一个困惑,当我通过引用将变量 x 传递给变量 y 时,x 和 y 现在应该指向相同的位置,但我得到的输出并不相同。
完整的详细讨论在这里: http://gateoverflow.in/94182/programming-output 我已经尽力向用户解释了这些东西,但我仍然无法完全说服他,也许我缺乏一些概念。
粗略的代码示例:
var b : int;
procedure M (var a, int)
begin
a= a*a;
print(a);
end;
procedure N
begin
b= b+1;
M(b);
end;
begin
b=12;
N;
print(b);
end;
我假设所讨论的变量是静态的,因此 a b 的值不应从 13 改变,但 a 的值应为 13*13=169 ,但我的推理与什么相反参考调用是关于。
pascal 代码来自未经授权的书,请抛出一些见解。
我不得不复习范围界定术语。我自己对静态和动态范围界定感到困惑。所有现代编程语言都使用静态作用域。我得出结论,a 和 b 在各自的打印语句中的值都应为 169。