如一过程:
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应该是要传它的地址进去吧,恩应该怎样传地址;
急用麻烦赐教!

解决方案 »

  1.   

    值类型与引用类型procedure TForm1.ChangeMes(MM: TMemo; var Tem: string); 
      

  2.   

    对象本身就是指针所以用不用var效果是一样的
    而tem则不然,用var可以改变。
      

  3.   

    不好意思还有一点我不太清楚就是
    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没变化,不好意思笨了些。
      

  4.   


    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; 
      

  5.   


    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
    ---------------------------
      

  6.   

    TO 红辣椒 
    如果我想通过穿指针的方式在过程里面赋值应该怎么实现?
    我不要同过这中方式:tem:='bbbb';
    我就想
    Temm:=  'bbbbb  ';
    通过改变Temm来改变tem的值,应该怎么实现?
      

  7.   

    var
      s:string;
      procedure proc(var a:string);
      var
        p:^string;
      begin
        p:=@a;
        p^:='hello world';
      end;
    begin
      proc( s );
      showmessage( s );
    end;