- 定义类型
type
Matrx1 = array of Double;
Matrx2 = array of Matrx1;
PPDouble = ^PDouble;
- 测试代码
var
a1 : Matrx1;
a2 : Matrx2;
p : PDouble;
pp : PPDouble;
begin
SetLength(a1, 3);
SetLength(a2, 3, 2);
a1[0] := 1;
a1[1] := 2;
a1[2] := 3;
a2[0][0] := 11;
a2[0][1] := 12;
a2[1][0] := 21;
a2[1][1] := 22;
a2[2][0] := 31;
a2[2][1] := 32;
p := @a1[0];
pp := @a2[0];
ShowMessage(FloatToStr(p^) + ' ' + FloatToStr((pp^)^));
end;
@表示取地址,^表示取值,上面的结果为 1 11;
如果想取得a1的第二个元素呢,
Inc(p, 1);
ShowMessage(FloatToStr(p^) + ' ' + FloatToStr((pp^)^));
结果为:2 11。
取得a2的指定位置元素:
Inc(pp, 1); (pp^)^ 为 21,即第二行第一列的值;
Inc(pp^, 1); 则(pp^)^为12,即第一行第二列的值;
- PDouble转成Matrx1
function PDoubleToArray(aPDouble: PDouble; m: Integer): Matrx1;
var
i: Integer;
begin
SetLength(Result, m);
for i := 0 to m - 1 do
begin
Inc(aPDouble, i);
Result[i] := aPDouble^;
Dec(aPDouble, i);
end;
end;
- PPDouble转成Matrx2
function PPDoubleToArray(aPPDouble: PPDouble; m, n: Integer): Matrx2;
var
i, j : Integer;
begin
SetLength(Result, m, n);
for i := 0 to m - 1 do
begin
Inc(aPPDouble, i);
for j := 0 to n - 1 do
begin
Inc(aPPDouble^, j);
Result[i, j] := (aPPDouble^)^;
Dec(aPPDouble^, j);
end;
Dec(aPPDouble, i);
end;
end;