有关动态数组的问题!(50分)

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

fjqzmcc

Unregistered / Unconfirmed
GUEST, unregistred user!
创建如下函数如:
procedure A(var Buf: array of char);
var
i:integer;
begin
for i:=low(Buf) to High(Buf)do
begin
//
end;
end;
调用:
var
Temp:array of char
begin
SetLength(Temp,10);
A(Temp);
end;
编译时出错!
将代参数定义下一般数组送入就不出错,但我希望Temp组数的大小是可变的,有没有其它方法可实现?
 
type
Tmyary=array of char;
procedure A(var Buf:Tmyary);
var
i:integer;
begin
for i:=low(Buf) to High(Buf)do
begin
//
end;
end;
调用:
var
Temp:Tmyary;
begin
SetLength(Temp,10);
A(Temp);
end;

其实这里用pchar好像更合适
 
我以前用的方法是传地址(pointer):
procedure A(Buf:pointer);
var
i:integer;
Temp:array of char;
begin
Temp:=buf;
for i:=low(Temp) to High(Temp)do
begin
//
end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
Temp:array of char;
begin
SetLength(Temp,10);
A(Temp);
end;
 
你的函数用pchar或string类型不行?
在SetLength后Temp已经成为一个定长数组,跟定义的参数不一致了
 
楼主只是用array of char做例子吧?如果是其他类型或者是record,还是传地址比较好,或者迷糊的方法。
 
其实你只要将A的定义改一下:
procedure A(var Buf:PCHAR);
调用时可以这样:
var
Temp:array of char
begin
SetLength(Temp,10);
A(@Temp[0]);
end;
就什么都OK了
不过如果是TEMP:STRING的话,就用
A(@TEMP[1])去调用.....
PCHAR比ARRAY OF CHAR好.
它还有一个STRPCOPY对PCHAR进行操作.!!
 
接受答案了.
 
后退
顶部