delphi2007 教程

delphi2007 教程

首页 新随笔 联系 聚合 管理
  1013 Posts :: 0 Stories :: 28 Comments :: 0 Trackbacks
函数返回数组怎么调用啊? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061221095617231.html
type  
      a_nx   =array   of   Integer;  
        function   Func_getnx(CYbh:   string;   cNy:   string;var   sErr:   string):   a_nx;  
   
  客户端程序中我怎么调用这个函数啊?我申明了一个整数数组好像不行?

急!在线等!

function里面怎么还有"var"的部分呢?  
  ----------------------------------------------------  
  type  
      a_nx   =array   of   Integer;  
   
  var   x:   a_nx  
   
  function   Func_getnx(CYbh:   string;   cNy:   string):   a_nx;  
  begin  
      //....  
  end  
   
  x   :=   Func_getnx;

搞错了,请无视上贴横线上面的话   -_-  
   
  不过赋值应该没问题的?

看你函数中如何对数组进行操作的   有没有动态设置一下数组的长度!

这种设计是错误的  
   
  你要返回数组应用开放数组作参数  
   
  type  
      a_nx   =array   of   Integer;  
        function   Func_getnx(CYbh:   string;   cNy:   string;var   sErr:   string;anx   :array   of   Integer):boolean;  
   
  调用时传个数组进去就行了  
  这样结构保证,谁使用谁申请空间谁释放  
  Func_getnx   中   使用low(anx)   与   High(anx)来取数组下标范围   (因为Delphi   可以array[x..y]滴  
   
  如果你一定要返回数组哪比较麻烦  
      a_nx   =array   of   Integer;  
        function   Func_getnx(CYbh:   string;   cNy:   string;var   sErr:   string):   Pointer;  
        begin  
            GetMem(Result,iNeed   *   Sizeof(Integer);   //   申请堆空间  
          ///do....  
   
          end;  
          使用时  
          更加麻烦   Delphi好像不能给数组指针给值  
        useanx:   a_nx;  
        setlength(a_nx,needsize);  
        aPointer   :=   Func_getnx.....  
        Copymemory(useanx,apointer,CopySize);  
  然后才能   useanx....  
   
        还要   Freemem(apointer,size);

我还是不大明白:  
  type  
      TArray1   =   array   of   xxx;  
   
  var  
      a:   TArray1;  
   
  function   x(..):TArray1;  
   
  为何不能直接a:=x,   把函数x的引用传递给a呢?   我以前试过可以的.

函数不支持数组类型返回值,但支持记录类型返回值  
  你可定义一个记录类型:  
  type  
      TRecData   =   Record  
              a_nx:   array   of   Integer  
      end;  
  然后:  
    function   funName(Pn....):   TRecData;

这样是可以的:  
   
  type  
        TArr   =   array   of   integer;  
   
  function   abc(a:integer):Tarr;  
  var  
          tempArr:TArr;  
  begin  
          setlength(tempArr,2);  
          tempArr[0]   :=   a;  
          tempArr[1]   :=   a   +   10;  
          result:=tempArr;  
  end;  
   
  procedure   TForm1.Button1Click(Sender:   TObject);  
  var  
          a   :   integer;  
  begin  
          a   :=   5;  
          showmessage(inttostr(       abc(a)[0]       ));     //5  
          showmessage(inttostr(       abc(a)[1]       ));     //15  
  end;

同意楼上,静态数组我没试过,但是动态数组肯定可以.

我就是用Harryfin(Harry)的方法实现的,我的是动态数组  
  谢谢各位

posted on 2009-01-04 16:51 delphi2007 阅读(650) 评论(0)  编辑 收藏 引用
只有注册用户登录后才能发表评论。