Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
Delphi 10.4 Sydney
|
Result: TDynFloatArrayOfArray
17. Dez 2012, 14:30
Ist das so eigentlich korrekt (***) . Ich meine, wenn man diesen Result jetzt zuweist, ist dann sichergestellt, daß sich der Pointer geändert hat oder sollte man da besser Copy verwenden? Ich meine, wenn A <> nil und B <> nil kann man auch nicht schreiben A:= B ? Ein Test verlief erfolgreich, nur ich versteh nicht wieso ?
Delphi-Quellcode:
type
TDynDoubleArrayOfArray = array of array of double;
TDynFloatArrayOfArray = record
Items: TDynDoubleArrayOfArray;
RowCount, ColCount: integer;
procedure Clear;
procedure Null;
procedure Dim(const Rows, Cols: integer);
procedure Assign(const A: TDynDoubleArrayOfArray);
end;
procedure TDynFloatArrayOfArray.Clear;
begin
SetLength(Items, 0);
RowCount := 0;
ColCount := 0;
end;
procedure TDynFloatArrayOfArray.Null;
var
I, J: integer;
begin
for I := 0 to RowCount - 1 do
for J := 0 to ColCount - 1 do
Items[I, J] := 0;
end;
procedure TDynFloatArrayOfArray.Dim(const Rows, Cols: integer);
begin
RowCount := Rows;
ColCount := Cols;
SetLength(Items, RowCount, ColCount);
end;
procedure TDynFloatArrayOfArray.Assign(const A: TDynDoubleArrayOfArray);
var
I, J: integer;
begin
Clear;
if (Length(A) > 0) and (Length(A[0]) > 0) then
begin
RowCount := Length(A);
ColCount := Length(A[0]);
Dim(RowCount, ColCount);
for I := 0 to RowCount - 1 do
for J := 0 to ColCount - 1 do
Items[I, J] := A[I, J];
end;
end;
function DoSomething: TDynFloatArrayOfArray;
var
I, J: integer;
begin
Result.Dim(Random(3) + 2 , Random(3) + 2);
for I := 0 to Result.RowCount - 1 do
for J := 0 to Result.ColCount - 1 do
Result.Items[I, J] := Random(999);
end;
procedure DynFloatArrayOfArrayToMemo(Memo: TMemo; const A: TDynFloatArrayOfArray);
var
I, J: integer;
S: string;
begin
Memo.Lines.BeginUpdate;
try
Memo.Clear;
for I := 0 to A.RowCount - 1 do
begin
S := '';
for J := 0 to A.ColCount - 1 do
S := S + Format('%10.2f', [A.Items[I, J]]);
Memo.Lines.Add(S);
end;
finally
Memo.Lines.EndUpdate;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
A, B: TDynFloatArrayOfArray;
begin
A := DoSomething; // ***
B := DoSomething; // ***
DynFloatArrayOfArrayToMemo(Memo1, A);
DynFloatArrayOfArrayToMemo(Memo2, B);
end;
|
|
Zitat
|