有关数组的两个小问题(50分)

  • 主题发起人 主题发起人 biyesheng
  • 开始时间 开始时间
B

biyesheng

Unregistered / Unconfirmed
GUEST, unregistred user!
1
该过程已经声明过了。
procedure TForm1.m(i:integer;n:array of integer);
begin
SetLength(n,i);
end;

编译时在“SetLength”一行出现错误:
[Error] Unit1.pas(27): Incompatible types
如果上面的过程改为:
procedure TForm1.m(i:integer;n:array of integer);
var
k:array of integer;
begin
SetLength(k,i);
end;
就能编译通过.

请问这是怎么一回事?
2
怎么把一个定义好长度的数组复制到另一个动态数组中去?
 
1。n的数组是全局变量吗?如果不是,编译时自然出错:
2。Dephi是允许一维动态数组传递的。
3。如果要赋值,可以用high,low取得当前数组的上,下限。
 
1:
可以定义TMyArray = array of integer;
然后:
procedure TForm1.m(i:integer;n:TMyArray);
begin
SetLength(n,i);
end;
2:
for i:=1 to High(Myarray) do
Myarray := Conarray;
Conarray是你自己定义好长度的数组。

 
将数组改成变量
TForm1.m(i:integer
n:TMyArray);
to
TForm1.m(i:integer
VAR n:TMyArray);

 
但是如何定义TMyArray = array of integer;?
是不是要在Type的下面定义?




 
就是在Type的下面定义。
 
但是在Type下怎么定义?
是直接:
TMyArray = array of integer;?
 
我的水平很差
你能帮我把原码拷过来吗?
谢谢
 
为什么定义为TMyArray = array of integer;
procedure TForm1.m(i:integer;n:TMyArray);
begin
SetLength(n,i);
end;
就不会出问题?
procedure TForm1.m(i:integer;n:TMyArray)与procedure TForm1.m(i:integer;n:array of integer)有何不同?
 
我想在一个自定义的过程里使用动态数组作为形参如
procedure TForm1.m(i:integer;n:array of integer);
在过程中再用SetLength来设定数据长度如SetLength(n,i);
但是编译时在“SetLength”一行出现错误:
[Error] Unit1.pas(27): Incompatible types

请大家帮我贴一个完整的编译没错误的例子好不好?



 
其实这个procedure TForm1.m(i:integer;n:array of integer)函数没有任何意思,调用
m(i,n)跟Setlength(n,i)没有区别。
 
注意一下你过程声明语句里的参数标志符。
“procedure TForm1.m(i:integer;n:array of integer);”。
该声明表明,变参i,n都是“传值”调用约定,也就是说,你在调用该procedure 时,实际
上给该过程传递的两个参数是两个拷贝“值”;如果你打算在该过程内部修改数组n的大小
的话,你应该采用“传址”调用的方式,也就是说,通过将变参的内存地址传入过程内部的
方式。只有这样,你才可以修改该变参的物理值。
在Delphi中,通过在变参面前加上“Var”限制符来显示声明传址调用,所以你可以将
你的procedure 声明该为如下形式:
procedure TForm1.m(i:integer;n:var array of integer);
好了,祝你好运!
 
开始我也是怎么想的,把过程声明为procedure m(const i: Integer
var n: array of Integer);
但一样出错。你的声明有问题, 不是‘n: var array of integer’,应该是‘var n: array of Integer’。
 
都别费力了,作为Open array parameters,delhpi是不支持用sSetLength的
这是delphi帮助的原话:
They can be passed to other procedures and functions only as open array
parameters or untyped var parameters. They cannot be passed to SetLength.


 
同意Del_Sun, 请加个var 。。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部