//声明
function test(var AValue:integer);boolean;
begin
  Result := AValue>0;
  AValue := AValue+1;
end;//调用
var
  I : integer;
  b : Boolean;
begin
  i := -1;
  b := test(i);
end;我想这样调用
var
  b : Boolean;
begin
  b := test(-1);
       ////////
       //我记得有个函数(或其它关键字)可以把常量作为变参传递,忘了:(
end;不要告诉我改函数声明或定义变量再调用,这些都知道第一个回答者得100分+,提前有分

解决方案 »

  1.   

    可以吗?编译通过?我的D7,不知道哪个DELPHI版本能不报错,呵呵
    Types of actual and formal var parameters must be identical
      

  2.   

    是会报这个错,我改成这样了.
    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
      StdCtrls;type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;function test(AValue:integer):boolean;
    var
      Form1: TForm1;implementation{$R *.DFM}
    function test(AValue:integer):boolean;
    begin
      Result := AValue>0;
      AValue := AValue+1;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      I : integer;
      b : Boolean;
    begin
      i := -1;
      b := test(-1);
    end;{var
      b : Boolean;
    begin
      b := test(-1);
    end;
    }end.
      

  3.   

    好像是改DELPHI中的一个设置就可以的。我也忘记了再帮你找找!
      

  4.   

    不行,就算行也与我的问题不符,我记得看到过这样的调用方法,不太清楚了
    b := test(func(-1));
              ////这个不知道应该是怎么写的
      

  5.   

    用var修饰传递的是参数地址,所以传递的一定要是个变量
      

  6.   

    老大,你说的哪是常量作变量用啊,明明是强制类型转换啊。刚才没有看清楚。现在给你b := test(Integer(-1))
    要转换成什么类型,只消在前面加上类型名就行了,不过得注意数据长度应该相等:)150分了:)
      

  7.   

    为什么这么做?精益求精!
    我不希望我的代码中有任何可以省略的代码.
    比如,我声明了一个常题,一个函数要用到它作为变参(不是我写的),而我又不要用这个函数的变参返回值,为了使用这个函数,我要声明一个无意义的变量!也许有点无理,或者变态,呵呵
    既然有(我的印象中DELPHI有),为什么不用?代码够简单吧,楼上的某些朋友请测试再发言,不然,UP就够了
      

  8.   

    如果是常数可以这么做const 
    A: Integer = 1;
    test(Integer((@A)^));
    直接写数字我就不知道了
      

  9.   

    变态!
    {$j+}
    function test(AValue:integer):boolean;
    begin
      Result := AValue>0;
      AValue := AValue+1;
    end;
    {$j-}procedure TForm1.Button1Click(Sender: TObject);
    var
      b : Boolean;
    begin
      b := test(-1);
    end;
      

  10.   

    rustle() 的好像可以,楼上的还是错的,
    只好作个标记了.下周来看吧:)
      

  11.   

    越看越觉得你的源码有问题!
    b := test(-1);
    你现在是在操作一个数啊,既不是常量,也不是变量!所以这个讲不通啊,不管如何,你定义一个变量也好,一个常量也好,也就给了程序一个回写的地址,但你现在给的是一个直接数,但function要求的是对相应地址操作,你的地址在哪?不通啊不通!
      

  12.   

    To feibob(灵猫):
        Delphi有没有这样一种机制,用一个关键字或函数,将一个值变为可操作的地址,当然,-1不可能成为可操作的地址,实际实现是,编译器为其分配一块内存让要传递变参的函数写,函数返回后再释放这块内存,而调用者不需要这个var参数的返回值,够明白了吧
      

  13.   

    同意:rustle() 我总觉得 test(fun(1)) 似乎不可能实现
      

  14.   

    我错了!
    function test(AValue:Pinteger):boolean;
    begin
      Result := AValue^>0;
      AValue^ := AValue^+1;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      b : Boolean;
    const
      A: Integer = -1;
    begin
      b := test(@A);
    end;
      

  15.   

    ???可以吗??
    ///-------------------------
    type
      Aa = record
      A:integer;
      PA: Pinteger;
    end;
    function test2(A: integer):aa;
    begin
      result.PA := @A;
      result.A := A;
    end;
    function test3(A: aa):Pinteger;
    begin
      a.PA^ := A.A;
      result := a.pa;
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      b : Boolean;
    begin
      b := test(test3(test2(-1)));
    end;
      

  16.   

    function test1(var AValue:integer):boolean;
    begin
      Result := AValue>0;
      AValue := AValue+1;
    end;type
      Aa = record
      A:integer;
      PA: Pinteger;
    end;
    function test2(A: integer):aa;
    begin
      result.PA := @A;
      result.A := A;
    end;
    function test3(A: aa):Pinteger;
    begin
      a.PA^ := A.A;
      result := a.pa;
    end;
    ///-------------------------procedure TForm1.Button1Click(Sender: TObject);
    var
      b : Boolean;
    begin
      b := test1(test3(test2(-1))^);
    end;
      

  17.   

    TIP = record
        i: Integer;
        p: Pointer;
      end;function test1(var AValue:integer):boolean;
    begin
      ShowMessage(IntToStr(AValue));
    end;function TForm1.GETVAR(A: INteger):TIP;
    begin
      result.i := a;
      result.p := @result;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
      Test1(TIP((GETVAR(1).p)^).i);
    end;
    Delphi要是能直接 @FuncName(xx) 就好了 ...就不用这样费心构造一个结构体
      

  18.   

    这大概是您想要的。之前我似乎又错了(?-?)function test5(var AValue:integer):boolean;
    begin
      ShowMessage(IntToStr(AValue));
    end;function GETVAR5(A: Integer):Pinteger;
    const
      i : integer = 0;
    begin
      integer((@i)^) := A;
      result := @i;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      Test5(GETVAR5(3)^);
    end;
      

  19.   

    function test5(var AValue:integer):boolean;
    begin
      ShowMessage(IntToStr(AValue));
    end;function GETVAR5(A: Integer):Pinteger;
    const
      i : integer = 0;
    begin
      i := A;
      result := @i;
    end;procedure TForm1.Button3Click(Sender: TObject);
    begin
      Test5(GETVAR5(3)^);
    end;这样也就可以了不过搞来稿去楼主也不是要这样的效果阿起码不通用,换个类型就要换个函数
      

  20.   

    rustle() ( ) i := A;
    此处报错您如何解决的??请教