动态数组的使用
//例1:
varStrArr: array of String; //動態數組定義時不與維數
beginSetLength(StrArr,6); //分配6個元素位置: 0-5StrArr[0] := '萬一'; //動態數組的下界是 0ShowMessage(StrArr[0]); //分配空間后和靜態數組一樣使用StrArr := nil; //一般沒必要手動釋放, 動態數組離開作用域會自釋放
end;//例2. 動態數組的引用:
varArr1,Arr2: array of Integer;a: array[0..1] of Integer;
beginSetLength(Arr1,6);Arr1[5] := 100;Arr2 := Arr1; //Arr2 引用了 Arr1ShowMessage(IntToStr(Arr2[5])); //100ShowMessage(IntToStr(Length(Arr2))); //當然 Arr2 維數也會是 6ShowMessage(IntToStr(SizeOf(Arr1))); //4, 其實動態數組是個指針ShowMessage(IntToStr(SizeOf(Arr2))); //4Arr2[5] := 99; //現在它們指向同一個數組, 改變這個就是改變那個ShowMessage(IntToStr(Arr1[5])); //99Arr1 := nil; //釋放其中一個指針, 數組繼續存在ShowMessage(IntToStr(Arr2[5])); //99
end;//例3. 數組 Copy <1>:
varArr1,Arr2: array of Integer;
beginSetLength(Arr1,6);Arr1[5] := 100;Arr2 := Copy(Arr1); //數組 CopyArr2[5] := 99; //改變 Arr2 不再影響 Arr1ShowMessage(IntToStr(Arr1[5]-Arr2[5])); //1SetLength(Arr1,7);ShowMessage(IntToStr(Length(Arr1))); //7ShowMessage(IntToStr(Length(Arr2))); //6, 沒有一點牽扯了
end;//例4. 數組 Copy <2>:
varArr1,Arr2: array of Integer;i: Integer;
beginSetLength(Arr1,6);for i := Low(Arr1) to High(Arr1) do //給每個元素賦值Arr1[i] := i+1;Arr2 := Copy(Arr1,1,3); //只 Copy 第2..4個元素ShowMessage(IntToStr(Arr1[1])); //2, 現在 Arr2[0] 和 Arr1[1] 的值是一樣的ShowMessage(IntToStr(Arr2[0])); //2ShowMessage(IntToStr(Length(Arr1))); //6, 維數肯定不一樣了ShowMessage(IntToStr(Length(Arr2))); //3
end;//例5. 動態多維數組:
varArr: array of array of Integer; //定義多維數組
beginSetLength(Arr,5,5); //分配空間Arr[0,3] := 100; //賦值ShowMessage(IntToStr(Arr[0,3])); //取值
end;//例6. 另類建立:
varArr: array of Integer;
beginArr := varArrayCreate([0,3],varInteger);ShowMessage(IntToStr(Length(Arr))); //4Arr := VarArrayOf([1,2,3,4]);ShowMessage(IntToStr(Arr[0])); //1{這是給變體數組使用的,可能會有效率問題}
end;
總結
- 上一篇: 从开始到现在之一
- 下一篇: 以架构师的眼睛看世界-Architect