假如有一个类Tman,我写了一个过程是这样写的;
procedure say(aman:Tman)
begin
   showmessage(aman.name);//name表示一个人的名字;
end;
我在程序中这样调用;
  say(tman.create) 可以执行
但如果将 过程改为
 procedure say(var aman:Tman)
begin
   showmessage(aman.name);//name表示一个人的名字;
end;
程序中再调用 say(tman.create)就提示形参与实参类型不一致,
两个过程只有一个var的区别,但转递的都是一个tman的对象(其实是一个指针)而已,我知道,var是按地址进行转递,没有var按值进行转递,但怎么会出现形参实参类型不致的问题?有时我用窗体作为参数传递时也会出现这样一个情况,这是怎么回事,这两上过程的参数到底有什么区别,请高手指教多谢!!!!

解决方案 »

  1.   

    procedure say(var aman:Tman)
    这样传的参数实际上成了指针(地址)的指针(地址)
    比如
    procedure setName(aman:Tman)
    begin
      aman.name:='a';
    end; setName(aman)
    say(aman:Tman)提示的就是a了, 
      

  2.   

    procedure say(var aman:Tman);say(tman.create);
    var定义的参数不能tman.create直接传递,定义一个变量接受tman.create,再把该变量做参就得
    var
      a: tman;
    begin
      a := tman.create;
      say(a);