谁来解释一下:数组和TStrings有什么差别?(30分)

  • 主题发起人 主题发起人 javesun
  • 开始时间 开始时间
J

javesun

Unregistered / Unconfirmed
GUEST, unregistred user!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;

type
PTest = ^TTest;
TTest = Array [0..1] of Integer;
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure ProTest(var ATest: TTest);
procedure ProPTest(var APTest: PTest);
procedure ProStr(AStr: TStringList);
end;

var
Form1: TForm1;

implementation

{$R *.DFM}

{ TForm1 }

procedure TForm1.ProTest(var ATest: TTest);
var
i: Integer;
begin
i:= ATest[0];
ATest[0]:= ATest[1];
ATest[1]:= i;
end;

procedure TForm1.ProStr(AStr: TStringList);
var
S: String;
begin
S:= AStr[0];
AStr[0]:= AStr[1];
AStr[1]:= S;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
MyTest: TTest;
MyPTest: PTest;
i: Integer;
begin
MyTest[0]:= 1;
MyTest[1]:= 2;
MyPTest:= @MyTest;
ProTest(MyTest);
i:= MyTest[0];
ProPTest(MyPTest);
ShowMessage(IntToStr(i)+ IntToStr(MyPTest^[0]));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
MyStr: TStringList;
begin
MyStr:= TStringList.Create;
MyStr.Add('A');
MyStr.Add('B');
ProStr(MyStr);
ShowMessage(MyStr[0]);
MyStr.Free;
end;

procedure TForm1.ProPTest(var APTest: PTest);
var
i: Integer;
begin
i:= APTest^[0];
APTest^[0]:= APTest^[1];
APTest^[1]:= i;
end;

end.
为什么结果会不一样。。。
 
哪里结果不一样了
是下面的吗?

procedure TForm1.Button1Click(Sender: TObject);
var
MyTest: TTest;
MyPTest: PTest;
i: Integer;
begin
MyTest[0]:= 1;
MyTest[1]:= 2;
MyPTest:= @MyTest

ProTest(MyTest)
// 交换了
i:= MyTest[0]
// i == 2
ProPTest(MyPTest)
// 再交换一次 myTest[0] == 1 了 myPTest^[0] 也等于 1 呀
ShowMessage(IntToStr(i)+ IntToStr(MyPTest^[0]));
end;

运行结果对呀
 
你没有看到吗?在数组和Tstringlist的变量在传递参数的时候,数组的加了var,如果不加呢?
 
已找到答案。
 
后退
顶部