如一过程:
procedure TForm1.ChangeMes(MM: TMemo; Tem: string);
var
MMM:TMemo;
Temm:string;
begin
MMM:=MM;
Temm:=Tem;
MMM.Lines.Add('aaaaa');
Temm:='bbbbb';
end;
结果是:
1、MM控件会加上一行‘aaaaa’;
2、Tem则不会该变,还是和原来一样是空没边成‘bbbbb’。
我的问题是为什么调用该过程后MM会该改变,而Tem却没变化;
我想Tem应该是要传它的地址进去吧,恩应该怎样传地址;
急用麻烦赐教!
procedure TForm1.ChangeMes(MM: TMemo; Tem: string);
var
MMM:TMemo;
Temm:string;
begin
MMM:=MM;
Temm:=Tem;
MMM.Lines.Add('aaaaa');
Temm:='bbbbb';
end;
结果是:
1、MM控件会加上一行‘aaaaa’;
2、Tem则不会该变,还是和原来一样是空没边成‘bbbbb’。
我的问题是为什么调用该过程后MM会该改变,而Tem却没变化;
我想Tem应该是要传它的地址进去吧,恩应该怎样传地址;
急用麻烦赐教!
而tem则不然,用var可以改变。
procedure TForm1.ChangeMes(MM: TMemo; var Tem: string);
这样定义或,这个过程怎么写才能实现通过这个过程改变 Tem的“值”
我试了下:
procedure TForm1.ChangeMes(MM: TMemo;var Tem: string);
var
MMM:TMemo;
Temm:string;
begin
MMM:=MM;
Temm:=Tem;
MMM.Lines.Add( 'aaaaa ');
Temm:= 'bbbbb ';
end;
但还是一样Tem没变化,不好意思笨了些。
procedure TForm1.ChangeMes(MM: TMemo;var Tem: string);
var
MMM:TMemo;
Temm:string;
begin
MMM:=MM;
Temm:=Tem;//这是赋值,是字符串拷贝,不是指针与C++不同。
MMM.Lines.Add( 'aaaaa ');
Temm:= 'bbbbb '; //这样是不会变的。
tem:='bbbb';//这样就会改变入参的值了!
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s:string;
procedure proc(var a:string);
begin
a:='hello world';
end;
begin
proc( s );
showmessage( s );
end;end.---------------------------
Project1
---------------------------
hello world
---------------------------
OK
---------------------------
如果我想通过穿指针的方式在过程里面赋值应该怎么实现?
我不要同过这中方式:tem:='bbbb';
我就想
Temm:= 'bbbbb ';
通过改变Temm来改变tem的值,应该怎么实现?
s:string;
procedure proc(var a:string);
var
p:^string;
begin
p:=@a;
p^:='hello world';
end;
begin
proc( s );
showmessage( s );
end;