procedure DoSomething(const PjInt:integer);
var
  pJ:pInteger;
  ppj:Pointer;
  inPJ:pointer;
  tmpInt:integer;
begin
  tmpInt:=pjInt;
//申请一个整型的空间
 new(pJ);
 //取指向其地址的指针
 ppj:=@pJ;
 //u将传入的地址拷贝到pJ中
 inPJ:=@tmpInt;
 move(inPJ,ppj,4);
 //显示它的内容
showmessage( inttostr(pJ^));// 《===========我预想的是显示5,但结果却是显示0.不知为何。请教
dispose(pj);end;
procedure TForm1.Button1Click(Sender: TObject);
var i:integer;
    pJ:integer;
    pI:Pointer;
    ppI,ppJ:Pointer;begin
    //变量I设为5
    i:=5;
    //i的地址
    pI:=@i;
    //pj的地址
    ppJ:=@pj;
    //取 指向i的地址的指针
    ppI:=@pI;
    //将指向I的地址放入pj中
    move(ppI,ppJ,4);
    //将它作为一个整数(4位BYTE)型的参数
    DoSomething(pJ);end;

解决方案 »

  1.   

    在Button1Click中,pJ没有初始化,在调用DoSomething时,它的值是不确定的。
    在move(ppI, ppJ, 4)中,只是将ppJ的地址设为和ppI一样。
      

  2.   

    在Button1Click中,move要改成这样:move(PInteger(ppI^)^, ppJ^,4); 这样pj的值才为5。
    在DoSomething中,move要改成为样,move(inPJ^,Pointer(ppj^)^, 4);   这样才会显示5。
      

  3.   

    procedure DoSomething(const PjInt:integer); 
    var 
      pJ:pInteger; 
      ppj:Pointer; 
      inPJ:pointer; 
      tmpInt:integer; 
    begin 
      tmpInt:=pjInt; 
    new(pJ); ppj:=pJ;   //去掉了@inPJ:=@tmpInt; MoveMemory(ppj,inPJ,SizeOf(integer));    //改为MoveMemory showmessage( inttostr(pJ^));// 《===========我预想的是显示5,但结果却是显示0.不知为何。请教 
    dispose(pj); end; 
    procedure TForm1.Button1Click(Sender: TObject); 
    var i:integer; 
        pJ:integer; 
        pI:Pointer; 
        ppI,ppJ:Pointer; begin     i:=5;     pI:=@i;     ppJ:=pj;     ppI:=pI;   //去掉了@    MoveMemory(ppJ, ppI  ,SizeOf(integer));  //改为MoveMemory     DoSomething(pJ); end;