我定义了一个动态数组,想在运行时增加它的长度,而前面的数据不需要重新赋值,应该怎样办var
  a : array of ingeger;
  i : integer;
begin
  setlength(a,5);
  for i := 0 to 4 do
    a[i] := i;
  //现在要将数组的长度设为10 
  setlength(a,10);
  for i := 5 to 9 do
    a[i] := i;
end;
这样做前面的5个被初始化成了0,如果这样做不对应该怎样做呢

解决方案 »

  1.   

    setlength(a,10); ->  setlength(a,length(a)+5);
      

  2.   

    var
      a:array of byte;
    begin
      setlength(a,5);//a(0,0,0,0,0)
      fillchar(a[0],5,#51);//--a(51,51,51,51,51)
      setlength(a,10);//---a(51,51,51,51,51,0,0,0,0,0)
      fillchar(a[0],10,#52);//---a(52,52,52,52,52,52,52,52,52,52)
      showmessage(inttostr(a[0]));
    end;
    从上面可知,动态数组在增加长度时,前面的数据是不会改变的。不是你想的:前面的会清0!
    所以不用担心,你前面的数据仍然正确存在。
      

  3.   

    晕啊,我发现我原来的程序把一个变量写错了,呵呵,谢谢dinglinger