动态数组作参数问题(100分)

  • 主题发起人 主题发起人 handll
  • 开始时间 开始时间
H

handll

Unregistered / Unconfirmed
GUEST, unregistred user!
我正在作一个功能,需要返回不确定个数的Integer,目前打算用动态数组实现
function TForm1.Todo(var aa: array of Integer): Boolean;
begin
SetLength(aa,1);
end;
编译提示SetLength(aa,0);有问题。查阅相关资料,说动态数组作参数其变量名就是一隐含的指针,所以我想应该能对其分配内存(SetLength),但编译不通过,我改怎么作?请教各位了!!
 
1、Delphi 中不允许在函数和过程中对动态数组参数的维数进行改变,原因不明。
2、解决起来很简单:
type
TIntArray = array of Integer;
function TForm1.Todo(var aa: TIntArray): Boolean;//var 完全可以去掉
begin
SetLength(aa, 1);
end;
 
我也觉得delphi 的动态数组传参不如VC里的好,用起来很不习惯,VC动态数组就不用这样,呵呵!
 
传递动态数组的指针进去

因为数组是指针,在SetLength的时候有可能会改变指针地址(因为要重分配内存空间),如果在过程中用SetLength就会改变地址,那以前的那个地址也就没什么用了,但是那你传递一个指向该数组的指针就可以解决这个问题了。
 
Type
TIntArray = array of Integer;
.......
function TForm1.Todo(var aa: TIntArray): Boolean;
begin
SetLength(aa,1);
end;
 
DELPHI语法里说,在参数里定义array of Type 不叫动态数组,叫可变参数数组,和动态数组不一样
 
什么是动态数组楼主没有搞清楚,function TForm1.Todo(var aa: array of Integer): Boolean;
aa实际是另外一个数组的引用
 
function TForm1.Todo(var aa: array of Integer,Size: Integer)
 
后退
顶部