将数组作为过程参数传递,该如何使用? 请各位看代码:(200分)

  • 主题发起人 主题发起人 20126301
  • 开始时间 开始时间
2

20126301

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
先在单元的开头定义: TtestVal=array[0..50] of integer

在private域定义过程: procedure test(testVal:TtestVal);
procedure TForm1.test(testVal:TtestVal);
begin
//在此我想依次取 testVal 的各值,如何写代码?
end;

我想调用此过程时以 test([1,2,5,10]) 这种方式访问,
不如这样是否可以,请各位帮忙处理,先感谢了![?]
 
当然可以:
procedure TForm1.test(testVal:TtestVal);
var
I: Integer;
begin
for I := Low(testVal) to High(testVal) do
begin
ShowMessage(IntToStr(testVal));
end;
end;
 
希望有朋友帮我解决此问题的后半部分,也就是:
调用此过程时以 test([1,2,5,10]) 这种方式访问,不知这样是否可以?等待你的帮助!

xianjun,感谢你的真诚解答,我已默认分配 50 分给你.能将后半部分帮忙解答者给予150分.
 
test([1,2,5,10])
是不是表示传 test(1),test(2),...?
是就好办
 
照你的想法,一次不知传多少个参数进去,test([1,2,5,10]) 我想这个不可行.
但有一个变通的方法,你先将1,2,5,10传到一个数组类中,然后再传数据类为参数,再在过程
中以数组类来一一对应就可行.
var YouArray:TtestVal;

procedure TForm1.initArray;
var testArr:TtestVal;
i:integer;
begin
for I := Low(testVal) to High(testVal) do
testVal:=-1;
testArr[0]:=1;
testArr[1]:=2;
testArr[2]:=5;
testArr[3]:=10;
test(testArr);
end;
procedure TForm1.test(testVal:TtestVal);
var
I: Integer;
begin
for I := Low(testVal) to High(testVal) do
begin
if testVal=-1 then break;
ShowMessage(IntToStr(YouArray[testVal]));
end;
end;
 
你如果要以Test([1,3,5])这种方式传递参数,就得用下面的方法:
procedure TForm1.BitBtn1Click(Sender: TObject);
procedure Test(A: array of Integer);
var
I, J: Integer;
begin
J := 0;
for I := Low(A) to High(A) do
Inc(J, A);
ShowMessage(IntToStr(J));
end;
begin
Test([1,3,5]);
end;
由上你可知了, test([1,2,5,10])不是表示传 test(1),test(2),...?
而是直接传入一个数组。
 
还可以用Variant数组, 这样你就可以传Test('1', 2, 'a', 2.3)之类的了。
procedure TForm1.BitBtn1Click(Sender: TObject);
procedure Test(A: array of variant);
var
I, J: Integer;
V: Variant;
S: string;
begin
J := 0;
for I := High(A) downto Low(A) do
begin
if VarType(A) = varString then
S := Format('A[%d]=''%s'''#13#10'%s', [I, A, S])
else
S := Format('A[%d]=%s'#13#10'%s', [I, A, S]);
end;
ShowMessage(S);
end;
begin
Test(['1','3',5, 1]);
end;

或者用array of const, Delphi会把参数转化为TVarRec类型,照着它的定义写就行了。
 
非常感谢!
xianjun 朋友,将你的代码稍作修改后我已调试成功.关键地方:
过程定义: procedure Test(A: array of Integer)

另外我想请问一句,此处的A是动态数组,还是由传递过来的数组参数决定?
也希望你能看看下面的问题:
在多线程中 procedure Synchronize(Method: TThreadMethod)
中的
Method 是一过程作参数,请问它是否可以是带参数的过程?

我已将我的全部200分分配给你. 你很棒!
 
TThreadMethod可以是带参数的过程,实际上它只是把过程的指针传了过去。 如:
procedure TForm1.Button1Click(Sender: TObject);
type
TMethod = procedure(A, B: string
C: Boolean);
procedure Test(AMethod: TMethod);
begin
AMethod('aaa', 'bbb', True);
end;
procedure TestMethod(A, B: string
C: Boolean);
begin
if C then
ShowMessage(A + B)
else
ShowMessage('False');
end;
begin
Test(@TestMethod);
end;
 
后退
顶部