函数返回数组怎么调用啊?
2009-01-04 16:48
555 查看
函数返回数组怎么调用啊? VCL组件开发及应用
http://www.delphi2007.net/DelphiVCL/html/delphi_20061221095617231.html
type
a_nx =array of Integer;
function Func_getnx(CYbh: string; cNy: string;var sErr: string): a_nx;
客户端程序中我怎么调用这个函数啊?我申明了一个整数数组好像不行?
急!在线等!
function里面怎么还有"var"的部分呢?
----------------------------------------------------
type
a_nx =array of Integer;
var x: a_nx
function Func_getnx(CYbh: string; cNy: string): a_nx;
begin
//....
end
x := Func_getnx;
搞错了,请无视上贴横线上面的话 -_-
不过赋值应该没问题的?
看你函数中如何对数组进行操作的 有没有动态设置一下数组的长度!
这种设计是错误的
你要返回数组应用开放数组作参数
type
a_nx =array of Integer;
function Func_getnx(CYbh: string; cNy: string;var sErr: string;anx :array of Integer):boolean;
调用时传个数组进去就行了
这样结构保证,谁使用谁申请空间谁释放
Func_getnx 中 使用low(anx) 与 High(anx)来取数组下标范围 (因为Delphi 可以array[x..y]滴
如果你一定要返回数组哪比较麻烦
a_nx =array of Integer;
function Func_getnx(CYbh: string; cNy: string;var sErr: string): Pointer;
begin
GetMem(Result,iNeed * Sizeof(Integer); // 申请堆空间
///do....
end;
使用时
更加麻烦 Delphi好像不能给数组指针给值
useanx: a_nx;
setlength(a_nx,needsize);
aPointer := Func_getnx.....
Copymemory(useanx,apointer,CopySize);
然后才能 useanx....
还要 Freemem(apointer,size);
我还是不大明白:
type
TArray1 = array of xxx;
var
a: TArray1;
function x(..):TArray1;
为何不能直接a:=x, 把函数x的引用传递给a呢? 我以前试过可以的.
函数不支持数组类型返回值,但支持记录类型返回值
你可定义一个记录类型:
type
TRecData = Record
a_nx: array of Integer
end;
然后:
function funName(Pn....): TRecData;
这样是可以的:
type
TArr = array of integer;
function abc(a:integer):Tarr;
var
tempArr:TArr;
begin
setlength(tempArr,2);
tempArr[0] := a;
tempArr[1] := a + 10;
result:=tempArr;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a : integer;
begin
a := 5;
showmessage(inttostr( abc(a)[0] )); //5
showmessage(inttostr( abc(a)[1] )); //15
end;
同意楼上,静态数组我没试过,但是动态数组肯定可以.
我就是用Harryfin(Harry)的方法实现的,我的是动态数组
谢谢各位
http://www.delphi2007.net/DelphiVCL/html/delphi_20061221095617231.html
type
a_nx =array of Integer;
function Func_getnx(CYbh: string; cNy: string;var sErr: string): a_nx;
客户端程序中我怎么调用这个函数啊?我申明了一个整数数组好像不行?
急!在线等!
function里面怎么还有"var"的部分呢?
----------------------------------------------------
type
a_nx =array of Integer;
var x: a_nx
function Func_getnx(CYbh: string; cNy: string): a_nx;
begin
//....
end
x := Func_getnx;
搞错了,请无视上贴横线上面的话 -_-
不过赋值应该没问题的?
看你函数中如何对数组进行操作的 有没有动态设置一下数组的长度!
这种设计是错误的
你要返回数组应用开放数组作参数
type
a_nx =array of Integer;
function Func_getnx(CYbh: string; cNy: string;var sErr: string;anx :array of Integer):boolean;
调用时传个数组进去就行了
这样结构保证,谁使用谁申请空间谁释放
Func_getnx 中 使用low(anx) 与 High(anx)来取数组下标范围 (因为Delphi 可以array[x..y]滴
如果你一定要返回数组哪比较麻烦
a_nx =array of Integer;
function Func_getnx(CYbh: string; cNy: string;var sErr: string): Pointer;
begin
GetMem(Result,iNeed * Sizeof(Integer); // 申请堆空间
///do....
end;
使用时
更加麻烦 Delphi好像不能给数组指针给值
useanx: a_nx;
setlength(a_nx,needsize);
aPointer := Func_getnx.....
Copymemory(useanx,apointer,CopySize);
然后才能 useanx....
还要 Freemem(apointer,size);
我还是不大明白:
type
TArray1 = array of xxx;
var
a: TArray1;
function x(..):TArray1;
为何不能直接a:=x, 把函数x的引用传递给a呢? 我以前试过可以的.
函数不支持数组类型返回值,但支持记录类型返回值
你可定义一个记录类型:
type
TRecData = Record
a_nx: array of Integer
end;
然后:
function funName(Pn....): TRecData;
这样是可以的:
type
TArr = array of integer;
function abc(a:integer):Tarr;
var
tempArr:TArr;
begin
setlength(tempArr,2);
tempArr[0] := a;
tempArr[1] := a + 10;
result:=tempArr;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a : integer;
begin
a := 5;
showmessage(inttostr( abc(a)[0] )); //5
showmessage(inttostr( abc(a)[1] )); //15
end;
同意楼上,静态数组我没试过,但是动态数组肯定可以.
我就是用Harryfin(Harry)的方法实现的,我的是动态数组
谢谢各位
相关文章推荐
- 函数调用和返回时,堆栈是怎么变化的?
- 实现函数 makeClosures,调用之后满足如下条件: 1、返回一个函数数组 result,长度与 arr 相同 2、运行 result 中第 i 个函数,即 result[i](),结果与 fn
- python 调用 DLL 的函数,返回的字符串数组的食用方法
- 带调用约定的虚函数返回数组引用
- FAQ10:函数调用和返回时,堆栈是怎么变化的?
- 关于在C/C++语言中,函数如何返回数组,数组如何作为参数传递以及返回数组的函数该如何调用问题的总结
- python 调用 DLL 的函数,返回的字符串数组的食用方法
- c++函数如何返回多值,返回数组的函数该如何调用
- c语言中调用函数的返回值,如果是数组,主函数要输出这个数组怎么实现?
- C/C++ 函数调用与函数返回值
- MFC应用程序调用控件中返回值之结构体和数组(控件由C++写成)
- IBatis调用ORACLE的存储过程、函数的返回结果集例子
- C++函数返回数组及动态建立二维数组的方法
- 写一个函数,返回一个数组中所有元素被第一个元素相除的结果
- shell 向函数传递数组和从函数返回数组的一个细节问题
- cpp函数返回对象&&数组
- fork()函数,一次调用,两次返回
- C++中如何使函数返回数组
- oracle 调用存储过程和函数返回结果集
- 将对象转为数组方法:延伸array_map函数在PHP类中调用内部方法