如何在delphi中动态定义一个数组的大小(100分)

  • 主题发起人 主题发起人 crzay
  • 开始时间 开始时间
C

crzay

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi中,常须使用大量数组,导致堆栈不足,如何可以动态定义
一个数组的大小以便重复利用?我在delphi 4 help 中看到有这样的
方法。但是在 procedure 中 参数传递中。注意,我不想利用指针!!!
 
delphi 3下没辙
只能用指针或用TList(or TStringList)代替
不知道d4下是否可以
 
D4好像可以,d3用Tlist吧
 
既然你在D4的帮助中见到, 你用该使用D4才对. D4中的array of 类型, 是很容易使
用的, 可以用SetLength(数组名, 新的长度)随时改变它的长度. 在过程中参数传递
则更简单了. 例如:

function HowMany0s(array1: array of integer): integer;
var i: integer;
begin
result:=0;
for i:=low(array1) to high(array1) do
if array1=0 then inc(result);
end;
 
d4不是有动态数组吗!
 
在D3中可以这样作:
p : PWordArray;//PWordArray 是delphi的数据类型

begin
GetMem(p, n);
for i:= 0 to n - 1 do
p := i;
end;
 
1、在D4中有动态数组
var
a:array of single;
begin
setlength(a,count);
end;
2、在d3中可以这样,比用tlist快且方便
var
a:array[0..0] of single;
begin
getmem(a,count*sizeof(single));
try
a[2] :=4;
//主意:在编译选项里关掉范围检查。
...
finally
freemem..
end;
end;
 
toto用的还是指针
PWordArray其实是
TWordArray=array [0..0] of word;
PWordArray=^TWordArray;
(只有word型呀,0-65535,连负数都没有,实际意义不大)
 

var
vtRec: Variant;
....
if VarIsEmpty(vtRec) then
vtRec := varArrayCreate([0, 初始长度], varVariant)
else
VarArrayRedim(vtRec, 你现在要的长度); //Resize the variant array.
....

就这样!
 
多人接受答案了。
 
后退
顶部