Delphi 函数指针 过程/函数类型

原创 2012年03月28日 16:27:06

Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针。函数指针的声明只需要参数列表;如果是函数,再加个返回值。下面讲解指向非对象(一般的)函数/过程的函数指针。

例如声明一个过程类型,该类型带一个通过引用传递的整型参数:

type 
  IntProc = procedure (var Num: Integer); //IntProc是指向过程的函数指针

这个过程类型与任何参数完全相同的例程兼容,即用它声明的变量,可以指向任何此类函数,并通过其进行函数的调用。

下面是一个兼容例程:

procedure DoubleTheValue (var Value: Integer);
begin
  Value := Value * 2;
end;
函数指针能用于两种不同的目的:声明函数指针类型的变量;或者把函数指针作为参数传递给另一例程。利用上面给定的类型和过程声明,你可以写出下面的代码:
var 
  IP: IntProc; 
  X: Integer; 
begin 
  IP := DoubleTheValue; 
  X := 5; 
  IP (X); 
end;

虽然这种调用方法比直接调用麻烦了,那么我们为什么要用这种方式呢?

(1)因为在某些情况下,调用什么样的函数需要在实际中(运行时)决定,你可以根据条件来判断,实现用同一个表达,调用不同的函数,很是灵活.

(2)利用函数指针我们可以实现委托,委托在.NEt中被发挥的淋漓尽致,但Delphi同样能实现

(3)实现回调机制

 delphi中可以通过函数指针把一个函数作为参数来传递,然后在另外一个函数中调用。

     1) 首先,申明函数指针类型TFunctionParameter。

type
  TFunctionParameter = function(const value : integer) : string;
 2) 定义准备被作为参数传递的函数
function One(const value : integer) : string;
begin
  result := IntToStr(value) ;
end;
function Two(const value : integer) : string;
begin
  result := IntToStr(2 * value) ; 
end;
3) 定义将要使用动态函数指针参数的函数
function DynamicFunction(f : TFunctionParameter; const value : integer) : string;
begin
   result := f(value) ;
end;
4) 上面这个动态函数的使用实例
var
  s : string;
begin
  s := DynamicFunction(One,2011) ;
  ShowMessage(s) ; //will display "2006"
  s := DynamicFunction(Two,2011) ;
  ShowMessage(s) ; // will display "4022"
end;


Delphi:记录类型、过程指针、函数(方法)指针字段的应用

由于工作关系使用delphi已经有一年时间,
  • jakrq
  • jakrq
  • 2014年10月14日 14:54
  • 938

delphi中函数指针的用法

       delphi中可以通过函数指针把一个函数作为参数来传递,然后在另外一个函数中调用。    1) 首先,申明函数指针类型TFunctionParameter。       type    ...
  • formiss
  • formiss
  • 2007年05月10日 17:29
  • 1239

delphi 中的函数指针 回调函数

delphi 中的函数指针 回调函数
  • rznice
  • rznice
  • 2015年01月27日 08:49
  • 2646

Delphi 函数指针 过程/函数类型

Pascal 中的过程类型与C语言中的函数指针相似,为了统一说法,以下称函数指针。函数指针的声明只需要参数列表;如果是函数,再加个返回值。下面讲解指向非对象(一般的)函数/过程的函数指针。例如声明一个...
  • god00
  • god00
  • 2011年05月11日 09:37
  • 451

typedef函数指针与函数类型的定义及使用方式

1、先给出一道面试题: #include "stdafx.h" #include "stdio.h" //实现数值的自增1 int inc(int a) { return(++a); } //实现数...
  • a904235765
  • a904235765
  • 2015年08月10日 21:17
  • 2270

c/c++ 函数类型和函数指针类型 详解

c/c++ 中数据结构跟指针真的是很强大 今天解释下 函数类型和函数指针类型 1.函数类型 在C语言中,函数也是一种类型,可以定义指向函数的指针。我们知道,指针变量的内存单元存放一个地址值, 而函...
  • feigegegegegegegeg
  • feigegegegegegegeg
  • 2016年09月08日 11:41
  • 3684

Delphi 事件 --事件原来是函数指针,同时是个属性

总结一下在Delphi中如何使用Poperty这一语法特性。如果学习过C#的朋友应该会很容易理解,因为C#的属性就是学习自Delphi,毕竟C#和Delphi是同一个设计者。 定义一个属性Pro...
  • bwqyujianweilai2
  • bwqyujianweilai2
  • 2015年09月07日 11:10
  • 548

函数类型,函数名是函数指针吗,函数的强制类型转换

问一:函数有类型吗? 答:有,举两个例子即可明白: 例1:char func()的类型为char (*)()  例2:int * func1(char a)的类型为int *(*)(char) ...
  • zhangzhi123456789
  • zhangzhi123456789
  • 2015年10月19日 19:16
  • 1675

delphi 过程类型

Procedural types(过程类型) Procedural types: Overview(概述) 过程类型允许你把过程和函数作为“值”看待,它可以赋给变量或传给其它过程和函数。比如,假设...
  • lailai186
  • lailai186
  • 2012年04月10日 21:58
  • 2146

Delphi 过程与函数

1.标准过程与标准函数         过程和函数是实现一定功能的语句块,是程序中的特定功能单元,即子程序。         Delphi语言的过程有两种:标准过程与自定义过程。标准过程是系统内部...
  • hailmy
  • hailmy
  • 2013年09月17日 13:45
  • 1342
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Delphi 函数指针 过程/函数类型
举报原因:
原因补充:

(最多只允许输入30个字)