在函数中将参数作为变量传递时,后台会发生什么

Guy*_*ush 1 delphi parameters function

我在某些地方提到了一些有关这方面的理论信息,但我还不明白......

让我知道我有这个功能和程序:

function ProcessVars1(var param1: type1; var param2: type2; var param3: type3): Boolean;
function ProcessVars2(var param1: type1; var param2: type2; var param3: type3): Boolean;
function ProcessVars3(var param1: type1; var param2: type2; var param3: type3): Boolean;
function ProcessVarsX(var param1: type1; var param2: type2; var param3: type3): Boolean;

function ProcessVars(const x: Integer; var param1: type1; var param2: type2; var param3: type3): Boolean;
var
  Res: Boolean;
begin
  case x of
    1: Res := ProcessVars1(param1, param2, param3);
    2: Res := ProcessVars2(param1, param2, param3);
    3: Res := ProcessVars3(param1, param2, param3);
    ...
  end;
  Result := Res;
end;

procedure DoSomething;
var
  x: integer;
  var1: type1;
  var2: type2;
  var3: type3;
begin
  // Determine X
  x := 1;  
  if ProcessVars(x, var1, var2, var3) then
  begin
    // Use var1, var2 and var3
  end;
end;
Run Code Online (Sandbox Code Playgroud)

我想知道的是,在调用"DoSomething"程序时,变量var1,var2和var3在内存中只创建了一次,还是3次?

有没有办法避免每次调用函数时创建变量?我的意思是,ProcessVars和ProcessVarsX只更改变量内容,而不是在内存中再创建它?

谢谢!

Rem*_*eau 7

DoSomething()声明四个局部变量- ,,x 和.每次调用时都会创建这些变量,并在退出时消失.var1var2var3DoSomething()DoSomething()

DoSomething()调用ProcessVars()它使一个副本中的价值x,因为x被传递的价值,但它传递的内存地址var1,var2,var3因为他们正在被通过var引用来代替.

ProcessVars()通过它param1,param2param3参数的各种ProcessVars...()功能,它们再次被传递var参考,因此只有存储器地址被周围通过.物理变量仍然DoSomething()只存在于内存中,它们不会被复制到内存中.