首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

如何理解参数中的Var

2012-03-02 
怎么理解参数中的VarprocedureTForm1.Button1Click(Sender:TObject)functionfGetStr(Vars:String):String

怎么理解参数中的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;

热点排行