电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> delphi技术>>delphi开发中数组使用需要注意的问题:

delphi开发中数组使用需要注意的问题

来源:远方网络 | 2005-12-29 14:13:16 | (有4757人读过)

我们在Delphi开发的时候经常要使用到数组,虽然它效率不一定高,但是却是最简单也是非常有效的一种实现方式,但是在数组的使用中如果稍不留神,可能就会陷入


麻烦的境地,看起来明明是对的,为什么总是得不到结果,以下为我自己在实际开发中发现的部分问题以及解决方法。





一:使用静态数组应该注意的问题:





1:char静态数组用在全局变量和局部变量中的区别。





您可以编写如下简单的测试,此时





procedure TForm1.Button1Click(Sender: TObject);


var


ArrayChar:array[1..100] of char;


begin


{point1} ArrayChar[1]:='a';


{point2} ArrayChar[100]:='6';





end;


你可以在point1处设置断点,使用鼠标观察,运行到该处之前DELPHI 为


数组ArrayChar分配内存的情况,可以看到,DELPHI在开始分配数组时,


并不为所有的元素置空,应该是随机分配值的, 你如果不理解这一点,在进行某些操作时就可能会感到很迷茫,以前我在对Dialogic卡接受的DTMF信号缓冲区数据进行处理的时候就碰到这个问题,


电话键盘拨叫明明是'111',但是他会莫名其妙的传给硬件卡类似于'&11$01'之类无法识别的信号,如果试图进行如下的操作:





procedure TForm1.Button1Click(Sender: TObject);


var


ag :array[1..100] of char;


i:integer;


begin


ArrayChar[1]:='a';


ArrayChar[99]:='6';


for i:= low(ArrayChar) to high(ArrayChar) do


if ag[i]='6' then


showmessage(inttostr(i));


end;





你希望能够找到的i 的值是 99 ,但是有可能就会得到的是错误的值,我


进行了小小的测试,我此时得到的值是 64,94,最后才是99,如果稍加修改,如下:





procedure TForm1.Button1Click(Sender: TObject);


var


ArrayChar:array[1..100] of char;


i:integer;


j:integer;


begin


FillChar(ArrayChar,high(ArrayChar)-low(ArrayChar)+1,#0);


ArrayChar[1]:='a';


ArrayChar[99]:='6';


for i:= low(ArrayChar) to high(ArrayChar) do


if ArrayChar[i]='6' then


showMessage(inttostr(i));


end;


这时,就不会出现先前的情况了,如果你仔细仍然可以使用同样的方法观察动态数组,会发现其实


动态数组在开始初始化时,是已经将所有的值都置空的。如果是整形的静态数组的话,应该设置值为0,


而不是#0。





不过以上的情况是静态数组是局部变量,你可以试着把它放到程序的前面,使它成为一个全局变量,你可以


再进行观察,可以发现这是,delphi已经把所有元素自动置空,这种情况下,你就不需要考虑静态数组的


初始化问题了。








对于字符串数组,两种情况下,初始化时都已经清空了,不需要你去做初始化工作,有兴趣可以自己调试看看。








二:关于动态数组的越界问题如下:


procedure TForm1.Button1Click(Sender: TObject);


var


ArrayDy:array of char;


begin


setlength(ArrayDy,100);


ArrayDy[0]:='a';


ArrayDy[1]:='b';


ArrayDy[99]:='c';


ArrayDy[100]:='d';//error! 越界


ArrayDy[101]:='e'; //error!越界


showmessage(ArrayDy[101])


end;


这是虽然数组ArrayDy[100],ArrayDy[101]都已经越界,但是程序却照常运行。要能够让DELPHI能够做出


提示,可以打开:Project \Options\complier\range checking开关。





以上是我们开发人员经常碰到的问题,问题虽小,但是如果不注意,当系统比较大的时候,根本就无法找到问题的所在。
delphi技术热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号