type Func = function(X: Integer): Integer;
var
F: Func;
P: Pointer;
N: Integer;begin
F := Func(P);
Func(P) := F;
@F := P;
P := @F;
N := F(N);
N := Func(P)(N);
end.begin的第二句,Func(P) := F;是什么意思???变量标识符一般都在等号左边啊?
最后一句N := Func(P)(N);是什么意思?为什么后面会有(N)?

解决方案 »

  1.   

    1.Func(P) := F;
      P是Pointer,F是Func类型,类型不兼容,因此必须进行强制转换。
      Func(P)就是将P强制转换成Func类型,不过,我更倾向于以下写法:
      P := Pointer(F); 强制转换源,而不是目的。2.N := Func(P)(N);
      P是Pointer,强制转换成Func,  Func是一个函数指针。
      转换完之后再调用该函数指针。N是该函数所需要的参数。
      

  2.   

    是啊,我也觉得P := Pointer(F);更好,这个代码只不过是Delphi资料中关于强制转换的例子,目的是说明转换。
      

  3.   

    这段恶心的代码主要说明两点:
    1. 函数类型本质上是一个指针
    2. 函数指针和无类型指针之间可以进行显式转换p.s.type
      TFunc = function(m: Integer): Integer;  function DoNothing(m: Integer): Integer;
      begin
        Result := m;
      end;var
      p: Pointer;
      f: TFunc;
      n: Integer;
    begin
      f := DoNothing;
      Assert(Assigned(@f));
      n := f(2);
      Assert(n = 2);
      p := @f;
      n := TFunc(p)(2);
      Assert(n = 2);
    end;
      

  4.   

    type   
      Func = function(X: Integer): Integer; //函数类型实质是指针类型 
    var 
      F: Func;           //F定义为Func函数类型,实质是指向函数的指针 
      P: Pointer;        //P为指针类型
      N: Integer;        //N为整形
    begin 
      F := Func(P);      //将P强制转化为Func类型并且赋值给F 
      Func(P) := F;      //将F赋值给Func(P)等同于P := Pointer(F);
      @F := P;           
      P := @F; 
      N := F(N);         //可以和整形相互转换
      N := Func(P)(N);   //
    end.