原数组由于长度不足,程序中需要实现一个方法,自动增加长度,但是如何能将新数组的地址传递到原数组地址空间呢?
代码如下:
    procedure TEncoder.increaseSize(i: longint);
    var
      j,k : longint;
      abyte0: array of byte;    //新的数组
    begin
        if (i < step) then
        begin
            i := step;
        end;
        j:= size + i;
        setlength(abyte0,j);
        for k:= 0 to size do
        begin
            abyte0[k]:= bytes[k];      //bytes 是原数组
        end;
        bytes := abyte0;               //这里报错
        size = j;
        abyte0 = null;
    }
    end;

解决方案 »

  1.   

    setLength(bytes,j);
    bytes := abyte0;
      

  2.   

    你既然会用SetLength设置新数组的长度为什么不用同样的方法设置老数组的长度啊
      

  3.   

    动态数组和静态数组只是语法看上去一样,本质上区别很大的
    动态数组本质上是一个指向一个数据结构的指针,和String的机制有点像
    网上有很多文章讲了动态数组和静态数组的区别,在这就不重复了给你个合并动态数组的例子procedure AppendBuffer(Source : TByteDynArray;var Dest : TByteDynArray);
    begin
      SetLength(Dest,Length(Source)+Length(Dest));
      Move(Source[0],Dest[Length(Dest)-Length(Source)],Length(Source));
    end;