动态数组的定义(50分)

  • 主题发起人 主题发起人 forever_ao
  • 开始时间 开始时间
F

forever_ao

Unregistered / Unconfirmed
GUEST, unregistred user!
delphi中使用动态数组是否可以之前不setlength,而象listbox控件一样,填加一个数值后长度就自动加1?
 
好像不可以
 
没有见过这么用的,除非象string这样的动态数组。
 
string这个也有限制,如果自己定义,应该是不行的。
 
动态数组一定是先setlength的.
 
好像不可以
 
使用下面的一段代码可以实现你所要求的功能,
var
mArray: array of Integer


function AddToArray(I: Integer): Integer;
begin
SetLength(mArray, Length(mArray) + 1);
mArray[High(mArray)] := I;
Result := Length(mArray);
end;

 
mArray[High(mArray)] := I;
请问楼上的这一句是干什么用的?

SetLength(mArray, 1);
marry[1]:=123;
……
SetLength(mArray, Length(mArray) + 1);
这样使用不行吗?
 
mArray[High(mArray)] := I;
这句的作用你可以调试一下。在mArray的最后加上一个元素

>>>>>>下面的这些代码在某些情况下是可以用的。但是mArray有1025个元素,你怎么处理?
SetLength(mArray, 1);
marry[1]:=123;
……
SetLength(mArray, Length(mArray) + 1);
 
mArray[High(mArray)] := I;
这句的作用你可以调试一下。在mArray的最后加上一个元素

但是下面的代码不能通过!就是把数组类型定义成结构!不能setlength.
procedure TForm1.Button1Click(Sender: TObject);
type
test=Record
a:string;
b:integer;
end;
var Dshuzu:array of test;
i:integer;
begin
setlength(Dshuzu,1);
for i:=1 to 5 do
begin
Dshuzu.a:='m';
Dshuzu.b:=i;
setlength(Dshuzu,length(Dshuzu)+1);
end;
end;
 
动态数组的下标是从0开始的, 不是1
for i:=0 to 4 do
 
同意 shiwee 说的
 
多人接受答案了。
 
后退
顶部