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
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
相关文章推荐
- 动态数组和指针转换(DELPHI)
- Delphi的动态数组,以及在复旦天翼学生收费管理软件的基础运用
- Delphi 调用 c编写的动态链接库,结构体指针作为参数
- 二维指针、数组指针和指针数组存储空间的动态分配和释放
- Delphi程序流程(3)(while)(自己构建结构数组写进程管理器 包含动态结构数组的添加)
- 【Trie】模板(动态指针,静态数组)
- 数组和指针、数组指针和指针数组、函数指针和指针函数、数组标识符的意义、静态和动态创建的数组的本质区别、标识符类型判断方法
- 通过指针简单创建动态的数组(C)
- C语言基础之函数、虚拟键盘的使用、数组、指针、动态申请内存、内存泄漏
- 指针作数据成员建立动态数组
- 数组指针,指针数组,动态二维数组,指针
- delphi 数组类型与数组指针的巧妙利用
- Delphi中使用SetLength分配的动态数组空间在越界赋值后出现invalid pointer operation异常
- 复习C语言系列二:动态调用函数指针数组
- [转]delphi 删除动态数组的指定元素
- Delphi 指针数组的引用
- C++动态分配指针数组
- 数组、指针和字符串:动态内存分配和释放
- [C++] 指针与动态数组
- Delphi合并2个动态数组