数值形参的形参表中只能使用类型标识符,而不能使用类型。
(出自http://www.lnedu.net/oblog31/user1/20/archives/2005/776.html  8.3 (一)1、值形参)---这句话是什么意思?类型标识符不就是^,Short....function CenterPoint(Rect: TRect): TPoint;是不是上面这样声明值参就是不对的?

解决方案 »

  1.   

    我觉得那就是一句屁话。可能它的意思是这样:假设有var Rect: TRect;procedure test(TRect);//不可以
    procedure test(R: Rect);//不可以
      

  2.   


    但若不是值参,而是变参,这样就是可以的了
    function test(var Integer): integer;
    asm
      //此空白函数功能:返回参数地址
    end;var
      A: Integer;procedure TForm1.Button1Click(Sender: TObject);
    var
      P: Integer;
    begin
      A := 3;
      P := test(A);
      Showmessage(Format('%p, %.8x',[@A,P]));
    end;
      

  3.   

    三楼代码写成这样或许更易读一些:
    function test(var TObject): Pointer;
    asm
      //此空白函数功能:返回变参的地址
      //即,第一个参数值(即变参地址,由eax寄存器传来)直接成为函数的返回值(eax)
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      P: Pointer;
    begin
      P := test(Sender);//将对象Sender作为参数传入
      Showmessage(Format('%p, %p',[@Sender,P]));//可见经test函数处理,P值已和Sender的地址相同
    end;