原数组由于长度不足,程序中需要实现一个方法,自动增加长度,但是如何能将新数组的地址传递到原数组地址空间呢?
代码如下:
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;
代码如下:
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;
bytes := abyte0;
动态数组本质上是一个指向一个数据结构的指针,和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;