我想知道是否有人可以指出,當使用兩種不同的數組拷貝方法時,會有什麼不同? 。定義自定義類型變量 - >複製自定義類型定義數組 - Delphi XE3
我需要做一個函數,可以從動態數組中排序整數元素,從min到max或max到min。因此,創建了一個新類型是這樣的:
type IntArray = array of integer;
然後,定義了一個函數來進行排序,具有兩個方向,這是由整數識別通過,與參數爲0進行排序朝最小(最大 - >分)或1分類爲max(min - > max)。
function SortArray(ToSort: IntArray; Direction: integer): IntArray;
var count, i: integer;
Label Label1, Label2;
begin
count:=Length(ToSort);
if (Direction = 1) then
begin
Label1:
for i := 0 to count-2 do
begin
if ToSort[i+1] > ToSort[i] then
begin
ToSort[i+1] :=ToSort[i] +ToSort[i+1];
ToSort[i] :=ToSort[i+1] -ToSort[i];
ToSort[i+1] :=ToSort[i+1] -ToSort[i];
GoTo Label1;
end;
end;
end
else
if (Direction = 0) then
begin
Label2:
for i := 0 to count-2 do
begin
if ToSort[i+1] < ToSort[i] then
begin
ToSort[i+1] :=ToSort[i] +ToSort[i+1];
ToSort[i] :=ToSort[i+1] -ToSort[i];
ToSort[i+1] :=ToSort[i+1] -ToSort[i];
GoTo Label2;
end;
end;
end;
Result:=ToSort;
現在,因爲它似乎,但結果不同,關於如何定義傳遞給函數調用數組此功能工作正常;
我有一個按鈕,它給出了函數的兩個調用onClick事件:
procedure Button1Click(Sender: TObject);
var a, b: IntArray;
i: Integer;
begin
SetLength(a, 10);
SetLength(b, 10);
for i := 0 to 9 do
begin
a[i]:=Random(100);
b[i]:=a[i]; // Example 1;
end;
// b:=a; // Example 2;
a:=SortArray(a, 1);
b:=SortArray(b, 0);
for i := 0 to 9 do
begin
Listbox1.Items.Add(InttoStr(a[i]));
Listbox2.Items.Add(InttoStr(b[i]));
end;
end;
現在的事情是,如果我定義陣列乙它設置有實施例1的方式, - >的功能正常工作。 A按最大值排序,而B按最小值排序;但是,如果我按照例2提供的方式定義數組B, - >該函數爲兩個調用提供了相同的結果,兩個數組均按最大值排序(如第一次調用中所調用的那樣)。
爲什麼它有什麼區別我如何定義數組b,爲什麼我不應該直接將它作爲var複製到var? 似乎並沒有多大意義,我在這一點上...
這是在文檔解釋HTTP:// docwiki。 embarcadero.com/RADStudio/en/Structured_Types#Dynamic_Arrays開始閱讀「如果X和Y ...」 – 2014-12-07 23:49:36
哦,我現在看到,這是我的第一個想法,但沒有對我很有意義。這對所有的,但只有動態數組有效,如果我得到它的權利......? – 2014-12-07 23:54:31
如果你有什麼是一個指針,那麼這個任務會複製參考。例如,一個賦值不會複製一個類實例。字符串是例外。 – 2014-12-08 00:11:32