procedure ChangeArray(Arr:array of Integer);//数组名本身已经就是地址了
implementation{$R *.dfm} procedure kao(var a:array of integer); var tem:integer; begin tem:=a[1]; a[1]:=a[2]; a[2]:=tem; end; procedure TForm1.Button1Click(Sender: TObject); var a:array[1..2] of integer; i:integer; begin a[1]:=1; a[2]:=2; kao(a); for i:=1 to 2 do edit1.Text:=edit1.Text+' '+inttostr(a[i]);end;end. 能编译通过就是让他运行时会出现错误。
这是因为你在Kao这个函数定义的数组为动态数组,其索引是从0开始的,你在a[2]处肯定会出错的。 针对你上面的代码有两种修改方法: 1.将你要使用的数组使用Type定义为一自定义类型,然后在你的ButtonClick和Kao方法中使用; Type TMyArray = Array [1..2] of Integer;procedure kao(var a:TMyArray); var tem:integer; begin tem:=a[1]; a[1]:=a[2]; a[2]:=tem; end; procedure TForm1.Button1Click(Sender: TObject); var a:TMyArray; i:integer; begin a[1]:=1; a[2]:=2; kao(a); for i:=1 to 2 do edit1.Text:=edit1.Text+' '+inttostr(a[i]); end; 2.将ButtonClick中使用的数组也定义为动态数组。
procedure kao(var a:array of integer);
var
tem:integer;
begin
tem:=a[1];
a[1]:=a[2];
a[2]:=tem;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:array[1..2] of integer;
i:integer;
begin
a[1]:=1;
a[2]:=2;
kao(a);
for i:=1 to 2 do
edit1.Text:=edit1.Text+' '+inttostr(a[i]);end;end.
能编译通过就是让他运行时会出现错误。
针对你上面的代码有两种修改方法:
1.将你要使用的数组使用Type定义为一自定义类型,然后在你的ButtonClick和Kao方法中使用;
Type
TMyArray = Array [1..2] of Integer;procedure kao(var a:TMyArray);
var
tem:integer;
begin
tem:=a[1];
a[1]:=a[2];
a[2]:=tem;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
a:TMyArray;
i:integer;
begin
a[1]:=1;
a[2]:=2;
kao(a);
for i:=1 to 2 do
edit1.Text:=edit1.Text+' '+inttostr(a[i]); end; 2.将ButtonClick中使用的数组也定义为动态数组。
试过才知道,别讲理论,你以为Pascal跟C/C++一样吗?楼主,对数组索引最好用Low和High,别硬编码。开放数组参数的索引都从0开始的。