procedure TForm1.Button11Click(Sender: TObject);
type
  Tpstr =^Tstr;
  Tstr = record
     i: integer;
     s: string;
  end;
var
  p: Tpstr;
  p1: Pointer;
begin
  new(p);
  showmessage(inttostr(integer(@P)));
  showmessage(inttostr(integer(P)));
  dispose(p);end;integer(@P)和 integer(P)有什么区别。
integer函数在delphi里是怎么解释的。查资料没找到。

解决方案 »

  1.   

    integer只是一种数据类型
    类似integer(P)的用法就理解为强制类型转换。
    integer(@P)和 integer(P)并无本质区别, 不同的是@P和P,前者是P的指针地址,后者是P本身。
      

  2.   


    同意你的观点
    如果要获取记录里面 i的实际地址值,怎么写? integer(@P^.i) 不对吧,这个得出来的值和integer(P)
    差不多。
      

  3.   

    就是lea跟mov的区别!Unit1.pas.38: showmessage(inttostr(integer(@P)));
    0045BFAE 8D55F8           lea edx,[ebp-$08]
    0045BFB1 8D45FC           lea eax,[ebp-$04]
    0045BFB4 E8ABC7FAFF       call IntToStr
    0045BFB9 8B45F8           mov eax,[ebp-$08]
    0045BFBC E8BF10FDFF       call ShowMessage
    Unit1.pas.39: showmessage(inttostr(integer(P)));
    0045BFC1 8D55F4           lea edx,[ebp-$0c]
    0045BFC4 8B45FC           mov eax,[ebp-$04]
      

  4.   

    我觉integer(@P^.i)的值应该更靠近 integer(@P) 而不是integer(P) 
      

  5.   

    我觉integer(@P^.i)的值应该更靠近 integer(@P) 而不是integer(P) 
      

  6.   

    因为i就是结构体的第一个字段,所以
    integer(@P^.i)=integer(@(P^.i))=integer(P),
    integer(@P)是指针变量本身的地址,integer(P)是指针指向的地址,而integer(@P^.i)是i的地址