为什么这个参数有返回值???(25分)

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

javesun

Unregistered / Unconfirmed
GUEST, unregistred user!
在网上找东东,发现这样一个问题:
procedure SplitString(sSource, sSep: String
sl: TStrings);
var
sTemp: String;
i: Integer;
begin
sTemp:= sSource;
sl.Clear;

i:= Pos(sSep,sSource);
while i<> 0 do
begin
sl.Add(Copy(sTemp, 1, i-1));
Delete(sTemp, 1, i);
i:= Pos(sSep, sTemp);
end;
sl.Add(sTemp);
sSep:= '';
end;

procedure TForm1.Button1Click(Sender: TObject);
var
TmpStr1: TStringList;
s1, s2: String;
begin
TmpStr1:= TStringList.Create;
s1:= 'f@dsdf@sdf@sdfd@fff@fff@';
s2:= '@';
Memo1.Lines.Clear;
SplitString(s1, s2, TmpStr1);
TmpStr1.SaveToFile('c:/a.txt');
Memo1.Lines.LoadFromFile('c:/a.txt');
Memo1.Lines.Add(s2);
TmpStr1.Clear;
end;

为什么TmpStr里面会有值呢?没有定义返回值啊。。。。
 
TmpStr1也不是返回值啊
传入procedure SplitString(sSource, sSep: String
sl: TStrings);时,只是把TmpStr1的指针传入了
 
procedure SplitString(sSource, sSep: String
sl: TStrings);
var
sTemp: String;
i: Integer;
begin
sTemp:= sSource;
sl.Clear;

i:= Pos(sSep,sSource);
while i<> 0 do
begin
[red]sl.Add(Copy(sTemp, 1, i-1));[/red]
Delete(sTemp, 1, i);
i:= Pos(sSep, sTemp);
end;
[red]sl.Add(sTemp);[/red]
sSep:= '';
end;
看懂看不懂这个函数?弱智的问题。
 
sl.Add(Copy(sTemp, 1, i-1))
//怎么会没有呢,这一句就给它赋值了
 
不是状态标示用吧!
 
在传递参数的过程中,sl: TStrings和TmpStr是同一个地址还是重新分配的地址?

是不是在传递指针或数组等参数的时候,是一样的呢?
 
类对象全部是指针类型。sl不是TempStr的拷贝,而是一个指向TmpStr的指针。
 
sl 和 TmpStr 是同一个地址。
基础问题,建议楼主多看书。
 
是地址传值呀! 晕,看一看PASCAL语言就晓得了
 
推荐几本PASCAL的基础书,偶找了N多本基础书也没有找到这一块。
 
为什么不用delphi自带的函数呢?
ExtractStrings(['$'], [' '],'1234$abcd$xyz', memo1.Lines);
函数作用:
把 '1234$abcd$xyz'里用'$'隔开的字符串提取出来放到memo1.Lines里面(即Tstringlist里)
 
ExtractStrings?
偶在delphi5的帮助里没有找到。。
 
sl用TStringList会不会好些,主要TStrings用来作参数,它不能有用TStrings操作,只有用于读取里面的值吧
 
看一下《Pascal精要》
对有点Delphi基础的人起到归纳总结的作用
好书
 
ExtractStrings 在delphi7的帮助里可以查到
 
我认为Delphi5开发者指南挺好的。
 
《Pascal精要》里没有这一点的描述。同样《Delphi5开发人员指南》里也没有这一点的描述。
关于参数的传递,偶找了好多资料,只有两点:一个是值参数,(integer, char,string..)。另一个是加var的值参数,为引用参数。
 
人家是初学者,怎么能这样说他呢,有明了的答案直接一点告诉他吧
虽然有些高手都答对了,但态度不行~~~~~~~~~`
 
解决同一个问题,不同的人有不同的方法,因为方法是有多种的。
大富翁是一个技术论坛,我个人认为它作用应该是提高程序员的水平,要提高自己的水平终究要靠自己的努力,旁人提供的应该是一种解决问题的方法、思路,而不是最终答案。通过提供思路这样引导提问的人去思考各种可能的解决问题的答案,我认为这样对提问者才有提高。当然这样会用更多时间,学习本来就很耗时间!
一旦旁人提供的最终答案,提问的人就不会去想其它可能更好,更可行的解决方法了。
我本人学 Delphi 没多久,我的经验告诉我,这种方法对我的提高更有帮助。
楼主的问题是一个典型的基础问题,基础的问题本来仔细看书,慢慢体会就会明白。
楼主也知道TmpStr1只是一个指针,用不用 var 只会影响指针,而不是目标地址的值。
 
后退
顶部