如果没有var的话,就是传值调用.在函数里修改该值,调用函数的地方没有影响.有var的话,就是传址调用.在函数里修改该值,调用函数的地方该值也被改变,所以参数必须是一个变量,而不能是一个常量.

解决方案 »

  1.   

    如果那个函数的类型是Nodetype,你的内容就会不一样,
    没有var,但是你的函数已经是一个指针了,有var和没有var已经没有区别了
    把你的函数
    function add(node_to_add:nodeType):boolean;
    试试,
    再加上
    function add(var node_to_add: NodeType):boolean;
    你就会知道区别了。
      

  2.   

    to copy_paste(木石三) :
    就算是指针,也有传值和传址的区别呀?例如:
    procedure a(p:pointer);
    begin
      a := NIL;
    end;
    调用a(p);后,p指向的地址不变.procedure a(var p:pointer);
    begin
      a := NIL;
    end;
    调用a(p);后,p指向NIL
      

  3.   

    那对于控件的对象,它也是个指针,如果对它进行属性的变化,那对应的值会不会变,

    procedure TForm1.Button1OnClick(Sender: TObject);
    begin
      TButton(Sender).Caption := TButton(Sender).Caption + '1';
    end;按理说,P (Sender)没有用var,那P(Sender)里面的值不会有变,但是P(Sender)确是改变了。
      

  4.   


    你写的是对该指针指向的地址的操作,而非对指针的操作.假如
    procedure TForm1.Button1OnClick(Sender: TObject);
    begin
      Sender := NIL;  //Sender不会被改变.
    end;假如
    procedure TForm1.Button1OnClick(var Sender: TObject);
    begin
      Sender := NIL;  //错误! Sender被改变了!这也是为什么虽然该方法较快,但没有用var Sender: TObject的原因.
    end;但在以上两种情况,Sender 的值都是一样的,即指向的地址是一样的,当然可以对里面的属性进行修改.唯一不同之处是可否对Sender 的值进行修改.
      

  5.   

    明白明白, 一个pointer是一个值,pointer指向的又是一个值
    多谢多谢
      

  6.   

    贴主该明白了吧,给把分给这们劳苦功高的windindance(风之舞),呵呵
      

  7.   

    呵呵,那么在我的函数中用不用VAR的结果是为什么一样的,谁能给我再详细讲讲?谢谢!
      

  8.   

    呵,你把Sender: TObject想成是node_to_add: pointer_to_node就行了,意思是一样的