如何给函数传递数组参数?

时间:2021-05-04 21:29:52
例子如下:
var
  A: array of myList; //myList是自定义结构,A在本单元是全程的

...
f1(B:array of myList);
begin
   B:=A;    //在此不能通过,提示相反的类型,怎么办
   ...
end;

f2();
begin
 showmessage(A[1].name);
end;
end.

17 个解决方案

#1


刚次写错了。
例子如下:
var
  A: array of myList; //myList是自定义结构,A在本单元是全程的

...
f1(B:array of myList);
begin
   A:=B;    //在此不能通过,提示相反的类型,怎么办
   ...
end;

f2();
begin
 showmessage(A[1].name);
end;
end.

#2


传递参数f1(a[i]);

A:=B;    //不太明白你要干什么

#3


A: array of myList是动态数组
b:是数组参数既开放数组
不是一会事

#4


想在本单元中其它函数中使用A,是通过f1(B:array of myList)初始化A的。

#5


应当怎样做再能在f2()中使用通过f1传进来的参数?

#6


自己复制:
SetLength(A,High(B)+1);
for i:=0 to High(B) do
  A[i]:=B[i];

#7


能不能声明一个指针,指向需要传入的数组B,以后在本单元中使用此指针呢?
如果能的话,应当怎样做。谢谢各位了。
一直在线等待。

#8


jimh(jimmy) 兄的方法我也想过,不过这样一来可能会消耗系统时间和内存,因为传入的数组可能很大,我想能不能通过A引用B?

#9


动态数组需要分配空间的。。
SetLength

#10


试过了,不行。

#11


Setlength
然后再偱环就是了,试试,可以吗?

#12


能不能声明一个指针,指向需要传入的数组B,以后在本单元中使用此指针呢?
如果能的话,应当怎样做。谢谢各位了。

#13


再次谢谢,如果分不够,可以再加。

#14


var
  A: array of myList; //myList是自定义结构,A在本单元是全程的

...
f1(B:array of myList);
begin
   B:=A;    //在此不能通过,提示相反的类型,怎么办
   ...
end;
--------------
这样定义没有必要吧
在函数里定义b,不要传参数,反正a是全局的,可以直接使用

#15


楼上说得也有道理,不过f1函数是个线程类成员函数,准确地说是该类的构造函数,直接为他的成员变量A负值,程序灵活性不大。

#16


这个应该是Pascal的问题。在pascal中,必须把这种情况定义一个类型。
TMyList = array of MyList;

函数定义:
f1( list:TMyList )
var p:TMyList;
begin
    p := list;
end;

#17


var
A: array of myList;你定义的是一个不定长的数组,使用前必须初始化数组大小
比如用:setlength()函数

#1


刚次写错了。
例子如下:
var
  A: array of myList; //myList是自定义结构,A在本单元是全程的

...
f1(B:array of myList);
begin
   A:=B;    //在此不能通过,提示相反的类型,怎么办
   ...
end;

f2();
begin
 showmessage(A[1].name);
end;
end.

#2


传递参数f1(a[i]);

A:=B;    //不太明白你要干什么

#3


A: array of myList是动态数组
b:是数组参数既开放数组
不是一会事

#4


想在本单元中其它函数中使用A,是通过f1(B:array of myList)初始化A的。

#5


应当怎样做再能在f2()中使用通过f1传进来的参数?

#6


自己复制:
SetLength(A,High(B)+1);
for i:=0 to High(B) do
  A[i]:=B[i];

#7


能不能声明一个指针,指向需要传入的数组B,以后在本单元中使用此指针呢?
如果能的话,应当怎样做。谢谢各位了。
一直在线等待。

#8


jimh(jimmy) 兄的方法我也想过,不过这样一来可能会消耗系统时间和内存,因为传入的数组可能很大,我想能不能通过A引用B?

#9


动态数组需要分配空间的。。
SetLength

#10


试过了,不行。

#11


Setlength
然后再偱环就是了,试试,可以吗?

#12


能不能声明一个指针,指向需要传入的数组B,以后在本单元中使用此指针呢?
如果能的话,应当怎样做。谢谢各位了。

#13


再次谢谢,如果分不够,可以再加。

#14


var
  A: array of myList; //myList是自定义结构,A在本单元是全程的

...
f1(B:array of myList);
begin
   B:=A;    //在此不能通过,提示相反的类型,怎么办
   ...
end;
--------------
这样定义没有必要吧
在函数里定义b,不要传参数,反正a是全局的,可以直接使用

#15


楼上说得也有道理,不过f1函数是个线程类成员函数,准确地说是该类的构造函数,直接为他的成员变量A负值,程序灵活性不大。

#16


这个应该是Pascal的问题。在pascal中,必须把这种情况定义一个类型。
TMyList = array of MyList;

函数定义:
f1( list:TMyList )
var p:TMyList;
begin
    p := list;
end;

#17


var
A: array of myList;你定义的是一个不定长的数组,使用前必须初始化数组大小
比如用:setlength()函数