发现文章标题:Delphi之动态数组使用总结 Delphi之动态数组使用总结.doc-免费下载

公文高手,超级方便的公文写作神器! 立即了解


Delphi之动态数组使用总结

第一篇:delphi之动态数组使用总结delphi之动态数组使用总结

传统的pascal语言其数组大小是预先确定的,当你用数组结构声明数据类型时,你必须指定数组元素的个数。专业程序员也许知道些许动态数组的实现技术,一般是采用指针,用手工分配并释放所需的内存。

delphi4中增加了非常简单的动态数组实现方法,实现过程效仿我前面讲过的动态长字符串。与长字符串一样,动态数组的内存动态分配并且引用记数,不过动态数组不支持copy-on-write技术。这不是个大问题,因为你可以把变量值设置为nil释放数组内存。

这样你就可以声明一个不指定元素个数的数组,并用setlength过程给数组分配一个特定大小的内存,setlength过程还可以改变数组大小而不影响其内容,除此外还有一些字符串过程也可用于数组,如copy函数。

以下摘录的代码突出了一点,这就是:定义数组后必须先为它分配内存,然后才能开始使用:

proceduretform1.button1click(sender:tobject);vararray1:arrayofinteger;beginarray1[1]:=100;//errorsetlength(array1,100);array1[99]:=100;//ok...end;如果你只定义一个数组元素个数,那么索引总是从0开始。pascal中的普通数组既能用不为零的下标,也能用非整数的下标,但动态数组均不支持这两种下标。象普通数组一样,你可以通过length、high和low函数了解到动态数组的状况,不过对于动态数组,low函数返回值总是0,high函数返回数组大小减1,这意味着空的动态数组其函数high返回值是-1,这是一个很怪的值,因为它比low的返回值还小。

图8.1:例dynarr窗体

以上作了简短的介绍,现在举个简例,例名dynarr,见图8.1。例子实在是很简单,其实动态数组没有什么特别复杂地方。我想通过该例说明几个程序员可能犯的错误。程序中声明了两个全程数组并在oncreate事件中初始化了第一个数组:

vararray1,array2:arrayofinteger;proceduretform1.formcreate(sender:tobject);begin//allocatesetlength(array1,100);end;这样就把数组所有值设置为0。完成这段代码你马上就能读写数组元素的值,而不用害怕内存出错,当然条件是你没有试图访问超过数组上界的元素。为了更好地初始化,程序中添加了一个按钮,执行数组元素赋值操作:proceduretform1.btnfillclick(sender:tobject);vari:integer;beginfori:=low(array1)tohigh(array1)do

array1[i]:=i;end;grow按钮用于修改数组大小,但并不影响数组内容。单击grow按钮后,你可以用getvalue按钮进行检验:


(未完,全文共3923字,当前显示1263字)

(请认真阅读下面的提示信息)


温馨提示

此文章为6点公文网原创,稍加修改便可使用。只有正式会员才能完整阅读,请理解!

会员不仅可以阅读完整文章,而且可以下载WORD版文件

已经注册:立即登录>>

尚未注册:立即注册>>

6点公文网 ,让我们一起6点下班!