function FuncA(var A: Integer): Integer;
function FuncB(B: Integer): Integer;这两个函数里面的参数,使用var和不使用var有什么区别呢?

解决方案 »

  1.   

    by value
    by reference
    的区别。
    function FuncA(var A: Integer): Integer;
    begin
      a := a+1;
      result := a;
    end;
    function FuncB(B: Integer): Integer;
    begin
      a := a+1;
      result := a;
    end;调用
    x := 3;
    funcB(x);
    后X=3
    而调用
    x:=3;
    funcA(x)
    后x=4;即使用VAR后对该参数的修改会影响到调用者,而不使用VAR则不影响,即函数中的参数完全是另一个拷贝,而与原来的值无关。
      

  2.   

    A 接收的是变量参数(局部的)B 接收的是常量参数(全局的)**********************
    当您的程序代码在调用一个过程或函数时,通常用参数传递数据到被调用的过程或函数中。最常用的参数有数值参数、变量参数和常量参数三种。         由被调用过程或函数定义的参数为形参,而由调用过程或函数指明的参数叫实参。在NoValue函数中,说明函数体中的AnEditBox是形参,而调用时在if NoValue(Edit1)…中,Edit1是实参。         数值参数在运行过程中只改变其形参的值,不改变其实参的值,即参数的值不能传递到过程的外面。试看下面的例程: procedure Calculate(CalNo:Integer);beginCalNo := CalNo*10;end;           用以下例程调用Calculate函数:…Number := StrToInt(Edit1.Text);Calculate(Number);Edit2.Text := IntToStr(Number); …            Number接受由编辑框1输入的数值,经Calculate过程运算。它是一个数值型实参。在进入Calculate函数后,会把Number实参拷贝给形参CalNo,在过程中CalNo增大十倍,但并未传递出来,因此Number值并未改变,在编辑框2中显示仍然是编辑框1中的输入值。形参和实参占用不同的内存地址,在过程或函数被调用时,将实参的值复制到形参占用的内存中。因此出了过程或函数后,形参和实参的数值是不同的,但实参的值并不发生变化。如果您想改变传入的参数值,就需要使用变量参数,即在被调用程序的参数表中的形参前加上保留字var。例如: procedure Calculate(var CalNo : Integer);           则CalNo并不在内存中占据一个位置,而是指向实参Number。当一个变参被传递时,任何对形参所作的改变会反映到实参中。这是因为两个参数指向同一个地址。将上一个例程中过程头的形参CalNo前面加上var,再以同样的程序调用它,则在第二个编辑框中会显示计算的结果,把第一个编辑框中的数值放大十倍。这时形参CalNo和实参Number的值都是Nnmber初始值的10倍。           如果当过程或函数执行是要求不改变形参的值,最保险的办法是使用常量参数。在参数表的参数名称前加上保留字const可以使一个形参成为常量参数。使用常量参数代替数值参数可以保护您的参数,使您在不想改变参数值时不会意外地将新的值赋给这个参数。
      

  3.   

    还有一种调用方式const,建议用Var和const调用,编译时进行了优化