您的位置:首页 > 编程语言 > Delphi

delphi里动态数组和指针的运用

2008-08-27 21:00 176 查看
{多维动态数组}procedure TForm1.BitBtn1Click(Sender: TObject);
var
Arr: array of array of array of Integer; {定义一个三维动态数组}
i,j,k,ic,jc,kc: Integer;
begin
Memo1.Lines.Clear;
SetLength(Arr, 2,3,4);
{获取各维的维数}
ic := Length(Arr);
jc := Length(Arr[0]);
kc := Length(Arr[0][0]);
{赋值}
for i := 0 to ic - 1 do
for j := 0 to jc - 1 do
for k := 0 to kc - 1 do
Arr[i][j][k] := Random(100);
{取值}
Memo1.Clear;
for i := 0 to ic - 1 do
for j := 0 to jc - 1 do
for k := 0 to kc - 1 do
Memo1.Lines.Add(Format('Arr[%d][%d][%d] = %d', [i, j, k, Arr[i][j][k]]));
end;{多维动态数组指针}procedure TForm1.BitBtn2Click(Sender: TObject);
Type
TMyArr = array of array of array of Integer; {定义一个三维动态数组类型}
var
PArr: ^TMyArr; {动态数组指针变量}
i,j,k,ic,jc,kc: Integer;
begin
Memo1.Lines.Clear;
{用作维数的变量}
ic := 2;
jc := 3;
kc := 4;
{分配内存; 按说动态数组还需要 8 个管理字节, 我不知道 Delphi 是怎么协调的}
GetMem(PArr, ic * jc * kc * SizeOf(Integer));
{设置数组}
SetLength(PArr^, ic,jc,kc);
{赋值}
for i := 0 to ic - 1 do
for j := 0 to jc - 1 do
for k := 0 to kc - 1 do
PArr^[i][j][k] := Random(100);
{取值}
Memo1.Clear;
for i := 0 to ic - 1 do
for j := 0 to jc - 1 do
for k := 0 to kc - 1 do
Memo1.Lines.Add(Format('Arr[%d][%d][%d] = %d', [i, j, k, PArr^[i][j][k]]));
//Memo1.Lines.Add(Format('Arr[%d][%d][%d] = %d', [i, j, k, TMyArr(PArr)[i][j][k]])); {按理说这种访问方法也对,可是这中方法在编译的时候能通的过去,在运行的就报错了}
{自己分配的内存要负责释放}
FreeMem(PArr);
end;procedure TForm1.Button1Click(Sender: TObject);
type
TArr = array[0..10] of Integer;
var
arr: ^TArr;
i:Integer;
begin
New(arr); {这里面就有个问题了,New()这函数是有来创建一个新指针,在delphi里面指针保存的是地址,也就是说Arr 里面保存的是地址码,并没有分配内存,可是为什么Arr^[i]却还能够赋值呢?}
{赋值}
for i := 0 to 10 do
Arr^[i]:=i*i;
for i := 0 to 10 do
Memo1.Lines.Add(Format('Arr[%d] = %d', [i, Arr^[i]]));
Dispose(arr); {这个Dispose释放的是指针,也就是说把Arr保存的地址值清为零,那么用来保存数据的内存地址是怎么释放的?}
end;
本文出自 “delphi研究” 博客,请务必保留此出处http://bigpower.blog.51cto.com/209892/95323
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: