我想返回array of Integer,如何作?(50分)

比尔

Unregistered / Unconfirmed
GUEST, unregistred user!
我设计了一个函数,想返回一个动态的整形数组,但无法象下面这样写
function getIntArray(nSize : integer) : array of Integer;
var
res : array of Integer;
begin
setLength(res,nSize);
...
result := res;
end;
编译说函数申明中array of Integer不能这样写。
我有其它的实现方法,但请问为何这样无法作,谢谢。
 
function getIntArray(nSize : integer;iArray:array of Integer) :boolean(或其他) ;
在其他地方调用函数:

procedure TForm1.Button1Onclick(sender:TObject);
var
数组名称:Array og integer;
begin
getIntArray(nSize ,数组名称);
//后面可以直接引用数组
end;
 
function getIntArray(nSize : integer,var res:array of Integer;) : boolean;
begin
setLength(res,nSize);
...
result := true;
end;
 
谢谢,我知道可以这样写,但为什么直接写Array of Integer就不行呢,还有,我在前面定
义了
PIntArray
然后再写
function getIntArray(nSize : integer) : PIntArray;
var
res : PIntArray;
begin
setLength(res,nSize);
...
result := res;
end;
就可以了
 
yanghai0437说的应该差不多,我没试过,不过,我返回数组也是这么用的,只不过不是动
态数组
 
这是delphi的语法问题,如果要返回Array of Integer
必须定义
type PIntArray = array of integer;
强调,这是语法问题。
如果你要问为什么这样,那你就研究一下编译系统,看看他为什么要
做这样的语法规定。
 
agree with SS2000
 
主要是类型兼容性问题
如果不事先定义一个数组类型,函数返回的数组是无法和其他数组类型变量兼容的,你无法使用它。
所以Delphi禁止这样作。
 
自己定義一個特殊類型
type TType1=array of integer;
不過好象動態數組不能作為參數傳遞的,可以考慮使用Stream進行參數傳遞
本人用的是MemoryStream
 
type
TDynamicIntegerArray:array of Integer;

function getIntArray(nSize : integer) : TDynamicIntegerArray;
begin
setLength(result,nSize);
...
end;
我用过这样的方法。
 
是要返回一个动态数组吗?可以这样
function Dynamicarray(Str:String):Variant;
begin
result := VarArrayCreate([0,2], VarOleStr);//建立动态数组
result[0]:=1;
result[1]:=2;
end;
 
to 楼主问题没有解决吗?怎么不发分
 
同意SS2000
 
问题肯定是解决了.
动态数组可以作参数传递.
 
to 比尔
怎么还不结贴!
type PIntArray = array of integer;不同意这种做法,如果把函数写在另外一个Unit里面
调用比较麻烦
 
我也觉得该结帐了。楼上的,你可以把type PIntArray = array of integer;放在
一个公共Unit里面,我想Delphi里面不也这样实现的么
 
function Dynamicarray(Str:String):Variant;
begin
result := VarArrayCreate([0,2], VarOleStr);//建立动态数组
result[0]:=1;
result[1]:=2;
end;
这种方法不用重新定义类型,在哪里都可以.不过也有它的不足,返回Variant;这是没办法的
 
SS2000 is right!!
 
多人接受答案了。
 
顶部