为什么procedure MyProc(var AVar);可以通过编译?

解决方案 »

  1.   

    procedure MyProc(var AVar: string);//少类型吧
      

  2.   

    没听过delphi有象VB的默认类型啊
      

  3.   

    To  Drate(小虫) 
      请教啦.可以告诉我原因吗? 没有类型呀.
      

  4.   

    var AVar定义了一个无类型参数,Pascal支持这种参数,当然可以通过编译。理论上,可以传递任意变量给无类型参数,但是实际上一般会有一些限制。
    使用无类型参数的目的是:让函数和过程可以处理多种类型,而这些类型又没有共同的父类型可以代表他们。
    1、这种限制可以由编译器给定(主要是VCL函数库本身使用这种方式,当传入参数类型不符合规定时,不能通过编译)。比如:
    procedure SetLength(var S; NewLength: Integer);
    var
      I: Integer;
    begin
      SetLength(I, 10); //不能通过编译,因为编译器规定SetLength只能接受字符串和动态数作作为参数
    end;
    2、在函数的实现中给定,如如果传入的参数不符合要求,不作处理或者抛出异常。这种情况通常适用于用户定义无类型参数。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  5.   

    procedure MyProc(var AVar);
    事实上在调用MyProc的时候是把AVar的地址给压栈,所有的地址都是4个字节,所以delphi知道怎么编译MyProc,所以编译就通的过。
    象procedure MyProc(AVar)就不能通过编译。因为delphi不知道该为AVar留多少空间。
      

  6.   

    我问一句:
    procedure MyProc(var AVar);和procedure MyProc(var AVar: Variant);有区别吗?
      

  7.   

    我想应该还是有区别的,一个值为未定义的4字节地址,VARIANT也是一种数据类型,不能说它没有定义呀,我想差别就在这里了
      

  8.   

    有区别:
    1、一个是无类型参数,一个是有类型参数
    2、VARIANT并不能代笔所有类型的数据,如指针类就不可以。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————