多维数组做形参该如何设置 ( 积分: 10 )

  • 主题发起人 主题发起人 gudubinghe
  • 开始时间 开始时间
G

gudubinghe

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure aaa(var Tex:array of word);
begin
...
end;

调用上面的过程:
var wt:array[1..10,1..90] of word;
aaa(wt);

但是这样程序编译出错.
 
procedure aaa(var Tex:array of word);
begin
...
end;

调用上面的过程:
var wt:array[1..10,1..90] of word;
aaa(wt);

但是这样程序编译出错.
 
一般是声明一个type
ta = array[1..10, 1..90] of word

这样定义就直接使用类型,调用时候也一样
 
多维数组不能直接做形参
可以这样
type
TMyArray = array of array of word;

procedure aaa(var Tex:TMyArray);
begin
...
end;

var wt: TMyArray;
aaa(wt);
 
看看这个:
--------------
function getvariantarray(const value:integer);variant
var
v:variant;i,j:integer;
begin
v:=vararraycreate([0,value,0,value],variant);
for i:=0 to value-1 do
for j:=0 to value-1 do
v[j,i]:='you value';
result:=v;
end;
 
你可以用指針得形式調用,可參考下這方面得資料。
 
to zealothasu,
to wanshi131,
如果这样调用,形参数组的下标从0开始,还是从1开始.是原来的数组,还是成为
[0..89,0..89]了。
 
0开始啊!
 
type
TMyArray = array of array of word;

procedure aaa(var Tex:TMyArray);
begin
...
end;

var wt: TMyArray;
aaa(wt);

如果说是从0开始,那么元素wt[5,90]是不是没有改变?
我看了些文章,说的也是从0开始,可是我刚才做了测试,wt[5,90]也改变了值.
 
这个是测试程序.
type
MyArray=array[1..2,1..10] of word;

procedure aaa(var Tt:MyArray);
var i,j:word;
begin
for i:=1 to 2 do
for j:=1 to 10 do
Tt[j]:=1;

end;

procedure TForm1.Button1Click(Sender: TObject);
var t:myarray;
i,j:word;
begin
for i:=1 to 2 do
for j:=1 to 10 do
t[j]:=222;
aaa(t);
end;

t的所有元素都改变为1.这个是否可以说明,在子过程中,不是从0开始,而是从数组定义的1开始的。
 

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
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部