Delphi中关于动态数组的引用操作
2010-05-22 18:08
423 查看
先看下面2个例子:
procedure TForm1.Button1Click(Sender: TObject);
var
A1, A2: array[0..3] of Integer; //普通数组
begin
A2 := A1;
A1[0] := 1;
A2[0] := 26;
ShowMessage(IntToStr(A1[0])); //返回1
end;
procedure TForm1.Button2Click(Sender: TObject);
var
A1, A2 : array of Integer; //动态数组
begin
SetLength(A1, 4);
A2 := A1;
A1[0] := 1;
A2[0] := 26;
ShowMessage(IntToStr(A1[0])); //返回26
end;
可见,动态数组的引用操作更类似AnsiString,而不像普通数组。
需要注意的是:
1.动态数组在使用前必须通过SetLength函数分配好内存。
2.动态数组总是从0开始。
3.动态数组会在超出作用域后自动释放内存。如果在作用域内希望释放内存(譬如占用内存较大的场合),只需把动态数组赋值为nil即可。
如果想在动态数组里也想和普通数组一样不通过引用方式直接复制数据的话,需要使用copy函数。
procedure TForm1.Button3Click(Sender: TObject);
var
A1, A2 : array of Integer;
begin
SetLength(A1, 4);
A2 := Copy(A1);
A1[0] := 1;
A2[0] := 26;
ShowMessage(IntToStr(A1[0])); //返回1
end;
通过copy函数可以把A2初始化成和A1数值相同而地址不同的两个独立的数组。
值得一提的是,copy函数还能通过设置参数决定拷贝数据的起始元素和元素个数。
例如:A2 := Copy(A1, 1, 2);
另外:多维动态数组可以通过如下方式创建:
procedure TForm1.Button3Click(Sender: TObject);
var
A1 : array of array of String;
begin
SetLength(A1, 2, 4); //等价于=> A1 : array[0..1, 0..3] of String
A1[0, 3] := 'Data';
......
end;
procedure TForm1.Button1Click(Sender: TObject);
var
A1, A2: array[0..3] of Integer; //普通数组
begin
A2 := A1;
A1[0] := 1;
A2[0] := 26;
ShowMessage(IntToStr(A1[0])); //返回1
end;
procedure TForm1.Button2Click(Sender: TObject);
var
A1, A2 : array of Integer; //动态数组
begin
SetLength(A1, 4);
A2 := A1;
A1[0] := 1;
A2[0] := 26;
ShowMessage(IntToStr(A1[0])); //返回26
end;
可见,动态数组的引用操作更类似AnsiString,而不像普通数组。
需要注意的是:
1.动态数组在使用前必须通过SetLength函数分配好内存。
2.动态数组总是从0开始。
3.动态数组会在超出作用域后自动释放内存。如果在作用域内希望释放内存(譬如占用内存较大的场合),只需把动态数组赋值为nil即可。
如果想在动态数组里也想和普通数组一样不通过引用方式直接复制数据的话,需要使用copy函数。
procedure TForm1.Button3Click(Sender: TObject);
var
A1, A2 : array of Integer;
begin
SetLength(A1, 4);
A2 := Copy(A1);
A1[0] := 1;
A2[0] := 26;
ShowMessage(IntToStr(A1[0])); //返回1
end;
通过copy函数可以把A2初始化成和A1数值相同而地址不同的两个独立的数组。
值得一提的是,copy函数还能通过设置参数决定拷贝数据的起始元素和元素个数。
例如:A2 := Copy(A1, 1, 2);
另外:多维动态数组可以通过如下方式创建:
procedure TForm1.Button3Click(Sender: TObject);
var
A1 : array of array of String;
begin
SetLength(A1, 2, 4); //等价于=> A1 : array[0..1, 0..3] of String
A1[0, 3] := 'Data';
......
end;
相关文章推荐
- 关于动态数组指针操作的两个例子
- 关于动态数组指针操作的两个例子
- 关于delphi XE7中的动态数组和并行编程(第一部分)
- 关于动态数组指针操作的两个例子
- 动态数组介绍----Delphi
- 关于 android Intent 传对象和对象数组的一些操作
- C++中关于[]静态数组和new分配的动态数组的区别分析
- 结构体类型的动态数组操作
- 关于PHP数组操作
- C++中关于[]静态数组和new分配的动态数组的区别分析
- 关于delphi的log的class已经完成,一如既往的open 他delphi ,日志class,临界区,文件操作
- 关于Activity中动态操作XML中已定义的控件
- Delphi中关于Rtti的一些操作(一)
- C++:关于动态数组
- DELPHI中记录类型动态数组删除
- 关于GCC中同时使用动态和静态库链接的操作参数和解释
- Delphi 的内存操作函数(2): 给数组指针分配内存
- 关于C#引用dll动态链接库文件的注释问题
- 动态数组和指针转换(DELPHI)
- [置顶] 关于select2 默认选中 动态选中 显示,刷新选中等操作