SetLength这个意思是设置数组最多只可以存放数组元素吗?这里“动态”的意思是指跟java里的ArrayList一样可以自动扩容吗?
我在循环里往数组添加元素,如果超出SetLength里的那个值会怎么样?当数组容量不够了,可以再用SetLength加大一点吗

解决方案 »

  1.   

    SetLength这个意思是设置数组最多只可以存放数组元素吗?
    是的
    这里“动态”的意思是指跟java里的ArrayList一样可以自动扩容吗?
    不是
    我在循环里往数组添加元素,如果超出SetLength里的那个值会怎么样?
    溢出错误,访问了未知的内存地址
    当数组容量不够了,可以再用SetLength加大一点吗
    可以
      

  2.   

    多谢,那delphi的动态数组相当于java 的数组了?delphi有没有像java的ArrayList那样的动态数组类型?
      

  3.   

    泛型单元中有类似Java的ArrayList
      

  4.   

    动态数组就是TList,TStringList这种
      

  5.   

    truexf 说得都对,补充一点。用 TList,TStringList 这些对象比动态数组方便,但消耗也大,有时代码反倒比动态数组繁琐。Delphi 的动态数组还是很有用。我一般用如下方式给动态数组赋值(假定有个字符串数组 SList,类型为 TStringDynArray,要给它增加一项 'abc'):var N: Integer;N := Length(SList);
    SetLength(SList, N + 1);
    SList[N] := 'abc';其中的要点是:用 SetLength 扩展数组后不会改变原有的值。这种逐项扩展的方式很精确紧凑,缺点是要反复申请内存,如果数组非常大,就要事先给数组预留空间。当然那可能会浪费一些内存,代码也要繁琐些。