怎么理解参数中的Var
procedure TForm1.Button1Click(Sender: TObject);
function fGetStr(Var s: String): String;
begin
Result := s;
end;
begin
fGetStr( 'a ');
end;
其中的Var怎么来理解?
怎么来调用?
[解决办法]
procedure test1(var a: Byte);
begin
a := Inc(a);
end;
procedure test2(a: byte);
begin
a := Inc(a);
end;
var
b: Byte;
begin
b := 1;
test1(b); => 这时 b := 2;
b := 1;
test2(b); => 这时 b := 1;
end;
[解决办法]
摘自ObjectPascal语法参考
var定义的参数叫变量参数
数值参数通过数值传递,而变量参数通过引用传递。
数值参数就像局部变量,它们的初始值是传给过程或函数的值。若把一个变量当作数值参数传递,过程或函数创建它的一个拷贝,改变这个拷贝对原始变量没有影响,并且,当程序返回调用者时,这个拷贝将被丢弃。
而另一方面,变量参数就像一个指针而不是一个拷贝,当程序返回调用者时,在函数或过程体中对它的改变将被保留,(仅仅)参数名本身超出了作用域。
如果例程声明了一个var 参数,你必须给它传递一个能被赋值的表达式,也就是一个变量、类型化常量(typed constant,在{$J+}状态下)、dereferenced 指针、字段或者索引变量(indexed variable)。
var定义的变量参数,调用时必须传一个变量过去,不能传一个常数,并且在执行后,变量的值会被例程改变。
procedure TForm1.Button1Click(Sender: TObject);
function fGetStr(var s: string): string;
begin
Result := s;
end;
var
mStr: string;
begin
fGetStr(mStr);
end;