procedure TForm1.x(out i: integer; out s: string);
begin
i:=i*2;
s:=s+'abc';
end;procedure TForm1.Button1Click(Sender: TObject);
var
 i:integer;
 s:string;
begin
 i:=3;
 s:='xxx';
 x(i,s);
 showmessage(s);
end;
为什么s传过去就是空了呢,最后的结果是abc,而不是xxxabc

解决方案 »

  1.   

    在delphi里, out型参数都会在函数内部做初始化, 比如字符串就会自动初始化为空字符串, 如果你想把参数要传入又要传出, 你应该用var而不是out, out代表的是这个参数仅供传出.
      

  2.   

    在delphi里, out型参数都会在函数内部做初始化, 比如字符串就会自动初始化为空字符串, 如果你想把参数要传入又要传出, 你应该用var而不是out, out代表的是这个参数仅供传出.
      

  3.   

    在delphi里, out型参数都会在函数内部做初始化, 比如字符串就会自动初始化为空字符串, 如果你想把参数要传入又要传出, 你应该用var而不是out, out代表的是这个参数仅供传出.
      

  4.   

    那为什么i就变成6了呀 integer性的就没被初始化?
      

  5.   

    哦, 这里少和你说了一个概念, 就是初始化只是针对"引用型"的对象, string是引用型的, 而integer不是, 类似的还有动态数组, 接口等
      

  6.   

    这里少和你说了一个概念, 就是out只是针对"引用"类型进行初始化, 比如string, 类似的还有接口, 动态数组, Integer 是普通的值对象, 不会做初始化.
      

  7.   

    好像是这样的out参数,如果是引用类型会重新create,即在函数内会重新初始化,传入值是无效的,但值类型可以接受参数的值
    string是引用类型,integer是值类型