平时都是值传递,今天传了个对象到某一函数,但函数体完成后,这个形参生存期到了,就FREE了.我想传个地址过去.这样生存期到了但我内存地址还没有FREE.
比如
function (panel:TWinControl):boolean;
把这个形参变成传地址,如何写啊.
C++中直接传个指针或引用就可以了.DELPHI呢.

解决方案 »

  1.   

    function (panel:TWinControl):boolean; 这已经是传引用了,函数内部修改对外部有效
      

  2.   

    panel:TWinControl本身就是一个类引用(或可以理解为指针),类实体在调用create后分配内存ps:传地址可在形参前用var或out修饰
      

  3.   

    function (panel:TWinControl):boolean; panel就是一个指针。在函数执行完成后panel对象还是存在的,除非你在函数中进行了FREE
      

  4.   

    同意
    你可以测试以下这两个函数
    function SendM(var FValue:integer):Boolean; 
     begin
      FValue:=123;
     end;function SendN(FValue:integer):Boolean;
     begin
      FValue:=128;
     end;调用方法:
    procedure Test;
     var
     F:Integer;
    begin
     F:=1;
     SendM(F);
     ShowMessage(IntToStr(F)); //显示为123
     SendN(F);
     ShowMessage(IntToStr(F)); //显示为123
    end;
      

  5.   

    Delphi对于复杂数据类型做为参数传递时,均为地址传递!
      

  6.   

    Tobject及其子类做为参数都是传的引用
      

  7.   

    Delphi中以对象作为参数传递时就是地址传递
      

  8.   

    加VAR只有基本数据类型才能加咯.我也是认为是个指针可奇怪了.是这样的var 
       a;//全局变量(注意,已经CREATE了类型也相同.)function abc(panel:TWinControl):boolean;
    begin
       a:=Panel;
    end;//在另一个函数中使用这个全局a
    却发现是不是原来的Panel了..WHY....
    而在abc函数内部,不管你怎么用都存在panel引用.
      

  9.   

    加VAR只有基本数据类型才能加咯.我也是认为是个指针可奇怪了.是这样的var 
       a;//全局变量(注意,已经CREATE了类型也相同.)function abc(panel:TWinControl):boolean;
    begin
       a:=Panel;
    end;//在另一个函数中使用这个全局a
    却发现是不是原来的Panel了..WHY....
    而在abc函数内部,不管你怎么用都存在panel引用.
      

  10.   

    function GetNum(var bytValue:byte):byte;这样用var 传入只是可以在同一个范围里参数的值会被改变,如果楼主定义一个全局的变量,应该可以的
      

  11.   

    a;//全局变量(注意,已经CREATE了类型也相同.) 如果你是"a:=Panel;"这样用的话,a根本不用create.  create后a就指向新的对象了你就把a当个指针,panel是一个实例,a只是指向它而已. 
      

  12.   

    function (panel:TWinControl):boolean; 这里你可以把panel直接认为就是指针。Delphi的对象不会在栈上产生的,所以没有局部对象被释放的问题。delphi的对象都必须 使用 Create 在堆上构建。