type Func = function(X: Integer): Integer;
var
F: Func;
P: Pointer;
N: Integer;
你可以应用下面的赋值语句
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 }====================================
以上每一个赋值如何理解?还请大侠高手指点!谢谢!
var
F: Func;
P: Pointer;
N: Integer;
你可以应用下面的赋值语句
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 }====================================
以上每一个赋值如何理解?还请大侠高手指点!谢谢!
解决方案 »
- pascal中if嵌套的问题
- 关于创建类中的 在一个窗体打开另一个窗体的释放问题
- 请问一下:DLL文件是二进位的文件吗?如果是,为何显示袋子像乱码这样的东西呀,是Windows系统定的吗?还是Windows只不过从内存中取出来
- 求两个日期之间的天数
- 想得到一条记录中的所有字段值,想用GetCurrentRecord来实现,请各位老大帮忙了
- 我想买一台电脑,请大家出主意(顶者有分
- 请各位帮我解决一下SQL SERVER 2000 与DELPHI 的连接问题(谢先)---急,在线等
- 我在MIDAS服务器里创建了方法,为什么远程不能访问
- 数据提取--------急,在线等候!!!
- 一个三层应用问题!
- Tstringgrid,不滚动滚动条,如何显示后面的数据
- mscomm接受数据问题!查了很多帖,还是没解决。。。。。求助
这个object pascal中的函数类型其实就是指向函数的指针,所以可以赋值,就是再赋一个函数的地址给他。你可以研究一下c++甚至c的指向函数的指针这一节内容,会有帮助的。在c#中没有指针了,就改了名字叫委托了。这个东西有点绕,搞多了就明白了,其实不难。windows的事件处理就是利用了这个东西,因为写button控件的人不知道将来的button1.click处理函数是什么,所以就定义一个onclick的事件类型(其实就是函数类型),当编程人员在写了click的具体内容后,再由编译器是用类似的语句连接起来(button1.onclick=button1.click; 这个语句在.dfm文件中),button1.onclick是函数类型的指针,button1.click是真正的函数。
P: Pointer; p就是一个普通指针
F := Func(P); { 将函数p(是个指针,用func转换类型)赋值给函数类型的F}
Func(P) := F; { 将函数类型F赋值给指针p }
@F := P; { 将指针p赋值给函数类型的F }
P := @F; { 将函数类型F赋值给指针p }
N := F(N); { 调用函数F }
N := Func(P)(N); { 调用函数P(P必须赋过值),调用的时候要转换类型为Func }