我在某些地方提到了一些有关此事的理论信息,但我还不明白......
让我们知道我有这个功能和程序:
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;
我想知道的是,当调用“DoSomething”程序时,变量var1,var2和var3在内存中只创建了一次,还是3次?
有没有办法避免每次调用函数时都创建变量?我的意思是,ProcessVars和ProcessVarsX只更改变量内容,而不在内存中再创建它?
谢谢!
答案 0 :(得分:7)
DoSomething()
声明了四个局部变量 - x
,var1
,var2
和var3
。每次调用DoSomething()
时都会创建这些变量,并在DoSomething()
退出时消失。
当DoSomething()
调用ProcessVars()
时,由于x
正在x
,它会对var1
的值进行复制通过值传递,但它传递了var2
,var3
,var
的内存地址,因为它们被 ProcessVars()
参考。
当param1
将其param2
,param3
和ProcessVars...()
参数传递给各种var
函数时, {再次传递它们{1}}引用,因此只传递内存地址。物理变量仅驻留在DoSomething()
中,它们不会被复制到内存中。