怎样把该记录型的动态数组返回到调用该函数的地方?我如下做错在哪?
//A.PAS
type
Rec_person=record
name:string;
age:integer;
end;function abc.dd():Rec_person;
var
aa:array of Rec_person;
begin
setlength(aa,100);
aa[0].name:='aaa';
aa[0].age:=10;
result:=aa; //这里为什么不能这样返回?要怎么做?
end;//B.PAS
type
Rec_person=record
name:string;
age:integer;
end;
procedure aaa();
var
aa:Rec_person;
begin
...
aa:=dd(); //为什么这里赋值也不行?
end;要怎么样解决,谢谢!
//A.PAS
type
Rec_person=record
name:string;
age:integer;
end;function abc.dd():Rec_person;
var
aa:array of Rec_person;
begin
setlength(aa,100);
aa[0].name:='aaa';
aa[0].age:=10;
result:=aa; //这里为什么不能这样返回?要怎么做?
end;//B.PAS
type
Rec_person=record
name:string;
age:integer;
end;
procedure aaa();
var
aa:Rec_person;
begin
...
aa:=dd(); //为什么这里赋值也不行?
end;要怎么样解决,谢谢!
var
aa:array of Rec_person;
begin
setlength(aa,100);
aa[0].name:='aaa';
aa[0].age:=10;
result.Assign(aa); //试试这样
end;
可是不行提示:
undeclared indentifier:'Assign'
type
Rec_person=record
name:string;
age:integer;
end;
PRec_person=^Rec_person; //定义一个记录指针
....
function abc.dd():PRec_person;
代码如下:
//A.PAS
type
Rec_person=record
name:string;
age:integer;
end;
PRec_person=^Rec_person;function abc.dd():PRec_person;
var
aa:array of Rec_person;
pperson:PRec_Person;
begin
setlength(aa,100);
aa[0].name:='aaa';
aa[0].age:=10; pperson:=@aa;
result:=pperson; //可以返回了
end; //B.PASprocedure aaa();
var
pperson:PRec_person;
begin
...
pperson:=dd(); //这里可以了,但是我测试有没有值时,是空的。
end;请问怎么解决?谢谢!
function abc.dd():Rec_person;
var
aa:array of Rec_person;
begin
setlength(aa,100);
aa[0].name:='aaa';
aa[0].age:=10;
result:=aa;
end;
注意这里的aa是局部变量吧,一旦函数返回整个变量就已经被销毁,这里实际上是返回数组的指针吧,既然变量已被销毁了,那么指针也就没有什么意义了
我觉得如果一定要这样用的话,可以在堆上分配内存或者是使用 var传入参数
var
Pperson:PRec_person;function abc.dd():PRec_person;
var
aa:array of Rec_person;
//pperson:PRec_Person;
begin
setlength(aa,100);
aa[0].name:='aaa';
aa[0].age:=10; pperson:=@aa;
result:=Pperson; //可以返回了
end;//B.PASprocedure aaa();
var
Myperson:PRec_person;
begin
...
Myperson:=dd(); //这里可以了,但是我测试有没有值时,是空的。
end;试试.
//A.PAS
type
Rec_person=record
name:string;
age:integer;
end;PRec_person=^Rec_person;
aa:array of Rec_person;function abc.dd():PRec_person;
var
bb:aa;
pperson:PRec_Person;
begin
setlength(bb,100);
bb[0].name:='aaa';
bb[0].age:=10; pperson:=@bb;
result:=pperson; //可以返回了
end;
type
Rec_person=record
name:string;
age:integer;
end;function abc.dd():Rec_person;
//var
// aa:array of Rec_person;
begin
/*setlength(aa,100);
aa[0].name:='aaa';
aa[0].age:=10;
result:=aa;
*/
Result.name := 'aaa';
Result.age := 10;这样就行了
end;//B.PAS
type
Rec_person=record
name:string;
age:integer;
end;
procedure aaa();
var
aa:Rec_person;
begin
...
aa:=dd(); //为什么这里赋值也不行?
end;要怎么样解决,谢谢!
如果我有好组数据要返回呢?恐怕这个方法不行吧?