这样一个函数:
procedure CopyIntToBuf(var Buf:Buffer;var Start:longword;Value,NumType:LongWord);
var ByteInt:Byte4;
Begin
      ByteInt:=IntToByte4(Value);
     copymemory(buf+Start,@ByteInt,4);
     Start:=Start+NumType;//????????
end;这里调用:
var 
   Buf:Buffer;
   piSign:LongWord;
  。
begin
  piSign := piSign+8;
    CopyIntToBuf(Buf,piSign,1,1);       
    CopyIntToBuf(Buf,piSign,1,1);  
  。。不解的是,Start:=Start+NumType;这一句,到底起到什么作用,难道每调用一次,值相加,会返回给pisign?

解决方案 »

  1.   

    copymemory已经赋值了,Start增加是为了下次调用准备的,下次copy时buffer填值的位置不同了。
      

  2.   

    >>难道每调用一次,值相加,会返回给pisign?你的理解是對的
      

  3.   

    我也知道是这样的,但还是不明白,第二次调用时,不是又重新给参数付值了吗?
    piSign := piSign+8;
        CopyIntToBuf(Buf,piSign,1,1);  第一次为 pisign+8    
        CopyIntToBuf(Buf,piSign,1,1);  第二次还是为pisign+8啊
      

  4.   

    我倒~ 第二次怎么会还是pisign+8泥~ ?
    楼主你仔细睇吓,第二次调用前可没有piSign := piSign+8;哦。
      

  5.   

    第二次调用时,piSign已经是第一次调用时的piSign+NumType的结果了。
      

  6.   

    ^-^  dream2001(飞云) 楼主:还真让你说对了。调用后piSign在函数中的重新赋值还真就返回给参数了。看到定义中那个前缀Var了么?
      

  7.   

    我写了一个简单的模拟函数,要本就得不到相要的结果,如下:
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Len:integer;
    begin
         Len:=iniint(定义为1)+1;
         
         TestPro(Len);
         TestPro(Len);
         showmessage(IntToStr(len));
    end;procedure TForm1.TestPro(TestID:integer);
    begin
          TestID:=TestID+1;
    end;
    最后show出来的还是2要本不是3,为何?
      

  8.   

    procedure TForm1.TestPro(TestID:integer);
    begin
          TestID:=TestID+1;
    end;
    改为:
    procedure TForm1.TestPro(var TestID:integer);//注意定义中的var!
    begin
          TestID:=TestID+1;
    end;
    再试一次。建议去看看Delphi中关于参数传递的内容
    ^_^