请问自定义一个函数,返回值怎么可以是一个动态数组?
另外,如果函数的参数是一个动态数组的话,是不是在函数内不能重新分配它的大小?请高手指点!!!!

解决方案 »

  1.   

    procedure Tform1.Function(a:integer,var b:array of string);
    begin
    end;
      

  2.   

    function retuarray(arr:array of string):integer;
    var ii,iLength: Integer;
    begin
      setlength(arr,iLength);
      for ii := 0 to iLength - 1 do
      begin
        arr[ii] := IntToStr(ii);
      end;
      result := 0;
    end;调用的时候可以这样:
    var arr: array of string;
        ii: Integer;  retuarray(arr);
      for ii := LOW(arr) to HIGH(arr-1) do
      begin
        ShowMessage(arr[ii]);
      end;
      

  3.   

    不是高手,但可以说说自己的理解,数组和变量是有区别的,数组的值改变不象变量赋值,而是靠地址来联系的,我想要达到目的,不用函数,而用procedure,例如:procedure TestStr(var FieldValue:Array of string,S:string),当你调用procedure TestStr(MyFieldValue,MyS)后,MyFieldValue就是你需要的结果数组。不知我说明白没有?
      

  4.   

    在函数中分配参数中的动态数组setlength(arr,iLength)编译通不过呀
      

  5.   

    使用TStringList,如下:function f(n:integer):TStringList;
    var
      i:integer;
    begin
      result:=TStringList.Create;
      for i:=0 to n do
      begin
        result.Add(intToStr(i));
      end;
    end;
      

  6.   

    type
      //key-value 一一对应的数据队列定义
      TResultRecord = record
        Key: Variant;
        Value: Variant;
      end;
      TResultArray = array of TResultRecord;function GetKeyArrayValue: TResultArray;
      procedure AddValueToArrayResult(key, value: variant);
      begin
        SetLength(Result,(High(Result)-Low(Result)+2));
        Result[High(Result)].Key := key;
        Result[High(Result)].Value := value;
      end;
    var i, x: Integer;
    begin
              for i:=0 to nds.length-1 do
                AddValueToArrayResult(i, x);
    end;