delphi之动态数组使用总结

delphi之动态数组使用总结

ID:16064178

大小:42.50 KB

页数:6页

时间:2018-08-07

delphi之动态数组使用总结_第1页
delphi之动态数组使用总结_第2页
delphi之动态数组使用总结_第3页
delphi之动态数组使用总结_第4页
delphi之动态数组使用总结_第5页
资源描述:

《delphi之动态数组使用总结》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Delphi之动态数组使用总结传统的Pascal语言其数组大小是预先确定的,当你用数组结构声明数据类型时,你必须指定数组元素的个数。专业程序员也许知道些许动态数组的实现技术,一般是采用指针,用手工分配并释放所需的内存。Delphi4中增加了非常简单的动态数组实现方法,实现过程效仿我前面讲过的动态长字符串。与长字符串一样,动态数组的内存动态分配并且引用记数,不过动态数组不支持copy-on-write技术。这不是个大问题,因为你可以把变量值设置为nil释放数组内存。这样你就可以声明一个不指定元素个数的数组,并用SetLength过程给数组分配一个

2、特定大小的内存,SetLength过程还可以改变数组大小而不影响其内容,除此外还有一些字符串过程也可用于数组,如Copy函数。以下摘录的代码突出了一点,这就是:定义数组后必须先为它分配内存,然后才能开始使用:procedureTForm1.Button1Click(Sender:TObject);varArray1:arrayofInteger;beginArray1[1]:=100;//errorSetLength(Array1,100);Array1[99]:=100;//OK...end;如果你只定义一个数组元素个数,那么索引总是从0开始

3、。Pascal中的普通数组既能用不为零的下标,也能用非整数的下标,但动态数组均不支持这两种下标。象普通数组一样,你可以通过Length、High和Low函数了解到动态数组的状况,不过对于动态数组,Low函数返回值总是0,High函数返回数组大小减1,这意味着空的动态数组其函数High返回值是-1,这是一个很怪的值,因为它比Low的返回值还小。图8.1:例DynArr窗体以上作了简短的介绍,现在举个简例,例名DynArr,见图8.1。例子实在是很简单,其实动态数组没有什么特别复杂地方。我想通过该例说明几个程序员可能犯的错误。程序中声明了两个全程数

4、组并在OnCreate事件中初始化了第一个数组:varArray1,Array2:arrayofInteger;procedureTForm1.FormCreate(Sender:TObject);begin//allocateSetLength(Array1,100);end;这样就把数组所有值设置为0。完成这段代码你马上就能读写数组元素的值,而不用害怕内存出错,当然条件是你没有试图访问超过数组上界的元素。为了更好地初始化,程序中添加了一个按钮,执行数组元素赋值操作:procedureTForm1.btnFillClick(Sender:TO

5、bject);varI:Integer;beginforI:=Low(Array1)toHigh(Array1)doArray1[I]:=I;end;Grow按钮用于修改数组大小,但并不影响数组内容。单击Grow按钮后,你可以用Getvalue按钮进行检验:procedureTForm1.btnGrowClick(Sender:TObject);begin//growkeepingexistingvaluesSetLength(Array1,200);end;procedureTForm1.btnGetClick(Sender:TObject)

6、;begin//extractCaption:=IntToStr(Array1[99]);end;Alias按钮的OnClick事件代码稍复杂些,程序通过:=算子把一个数组拷贝给另一个数组,从而有效地创建了一个别名(一个新变量,但引用内存中同一数组)。从中可见,如果你改变了其中一个数组,那么另一个同样也会改变,因为它们指向同一个内存区:procedureTForm1.btnAliasClick(Sender:TObject);begin//aliasArray2:=Array1;//changeone(bothchange)Array2[99]

7、:=1000;//showtheotherCaption:=IntToStr(Array1[99]);在btnAliasClick事件中增加了两部分操作内容。第一部分是数组等同测试,不过并不是测试实际的数组元素,而是测试数组所引用的内存区,检测变量是不是内存中同一数组的两个别名:procedureTForm1.btnAliasClick(Sender:TObject);begin...ifArray1=Array2thenBeep;//truncatefirstarrayArray1:=Copy(Array2,0,10);end;btnAlia

8、sClick事件的第二部分内容是调用Copy函数。该函数不仅把数据从一个数组移到另一个数组,而且用函数创建的新数组取代第一个数组,结果变量Array1

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。