在这个例子中,我如何通过value-result模拟调用。不添加变量而不更改变量名。?
Program one;
var
x:integer;
Function two():integer;
begin
x:=x+1;
two:=x;
end;
Procedure three(x:integer);
begin
x:=x+5;
x:=two();
end;
begin
x:=8;
three(x);
write(x);
end.
答案 0 :(得分:0)
如果是家庭作业,我认为您不必尝试 var ,难以找到答案。
编辑:下面的评论是正确的 - 也许我正在引导你走上错误的道路 - 最好回到原来的地方并从那里开始。
答案 1 :(得分:0)
做两个()三个()已经做了什么。
答案 2 :(得分:0)
目前的形式很难弄出一些问题。
但是,如果我们假设OP 询问如何在示例代码中模拟通过引用(而不是值)调用,那么这个问题似乎有道理。
所以...实际代码按值将参数传递给three()
。 three()
似乎试图将值存储到全局变量中,然后再调用two()
,而three()
会改变全局变量。
但全局变量实际上用于传递值,因此诀窍在于将全局按值传递给three()
之后,全局将最终更改,就好像它是通过引用传递的。
只有一个小问题(这似乎构成了整个问题):如何从one.x
内解决全局问题,因为参数的名称与全局的名称相同?
我不知道什么版本的Pascal应该运行此代码,但如果编译器与TP / Delphi系列兼容并且如果var名称必须保持不变,那么我会尝试我所知道的唯一方式到目前为止:three()
。具体来说,x:=x+5;
的实现中的这一行
one.x:=x+5;
我会改为
two()
因此,全局此处接收参数值增加5并调用two()
,{{1}}再次更改全局。