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只更改变量内容,而不是在内存中再创建它?
谢谢!
DoSomething()声明四个局部变量- ,,x 和.每次调用时都会创建这些变量,并在退出时消失.var1var2var3DoSomething()DoSomething()
当DoSomething()调用ProcessVars()它使一个副本中的价值的x,因为x被传递的价值,但它传递的内存地址的var1,var2,var3因为他们正在被通过var引用来代替.
当ProcessVars()通过它param1,param2和param3参数的各种ProcessVars...()功能,它们再次被传递var参考,因此只有存储器地址被周围通过.物理变量仍然DoSomething()只存在于内存中,它们不会被复制到内存中.