函数类型变量的疑问。(100分)

  • 主题发起人 主题发起人 eastweast
  • 开始时间 开始时间
E

eastweast

Unregistered / Unconfirmed
GUEST, unregistred user!
在Delphi7的帮助中看到以下的代码,有些地方不太明白,知道的用比较通俗的语言给解释一下:(代码中的几个赋值有点晕)
原文如下:
----------------------------------------------------------------
You can cast variables to a procedural type. For example, given the declarations

type Func = function(X: Integer): Integer;
var
F: Func;
P: Pointer;
N: Integer;

you can make the following assignments.

F := Func(P)
{ Assign procedural value in P to F }
Func(P) := F
{ Assign procedural value in F to P }
@F := P
{ Assign pointer value in P to F }
P := @F
{ Assign pointer value in F to P }
N := F(N)
{ Call function via F }
N := Func(P)(N)
{ Call function via P }
 
意思是说:你可以把变量指定为过程类型。就是说一个过程或函数都可以作为一个方法指针来引用。比如你所列的例子。
变量名前带@是取变量地址的意思。
 
去看看Delphi中指针吧``
 
函数或者过程都是指针,可以相互赋值
 
type Func = function(X: Integer): Integer
//声明一个方法类型。
var
F: Func
//F为方法变量,就是说只要它具体指向某个形如:function(X: Integer): Integer;的方法,就可以执行它。
P: Pointer
// 指针变量。
N: Integer;

you can make the following assignments.

F := Func(P)
{ Assign procedural value in P to F 把一个指针P强制转化为方法指针,如果p指针不是方法指针这里会出错。 如果成功,F则具有了执行能力。}
Func(P) := F
{ Assign procedural value in F to P 把一个方法变量赋值给一个指针,如果直接赋值肯定不行, 会提示类型不复,所以,得把指针转化为具体得方法类型指针}
@F := P
{ Assign pointer value in P to F 把一个指针赋值给一个方法得地址 跟上面得第一条语句功能一样}
P := @F
{ Assign pointer value in F to P 把一个方法变量得地址赋值给一个指针。跟第二条一样。}
N := F(N)
{ Call function via F 执行方法F, 其参数是N ,方法的返回结果也给了N}
N := Func(P)(N)
{ Call function via P 把指针p转化为方法类型func, 然后执行它,参数为n, 返回结果为 N}

其实很简单。 关键就是理解指针 ,地址, 方法类型, 方法变量。 就可以了, 我的笔记中有篇类似的文章。
 
楼上说的很详细啊!
 
多人接受答案了。
 
后退
顶部