Delphi中关于动态数组的引用操作

先看下面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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值