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