首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

在线求解.解决方案

2013-06-26 
在线求解...我是delphi初学者,今天上头要我用这个函数指针传递参数,,我想问一下就是:函数指针传参这个工作

在线求解...
我是delphi初学者,今天上头要我用这个函数指针传递参数,,我想问一下就是:函数指针传参这个工作原理是什么???谁能给我详细的解说一下,举例最好,谢谢!
[解决办法]


unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

type//定义一个函数指针,名为PCalc
  TCalc = function(a, b: integer): integer;
  PCalc = ^TCalc;

function FunA(a, b: integer): integer;//定义一个加法函数
begin
  Result := a + b;
end;

function FunB(a, b: integer): integer;//定义一个减法函数
begin
  Result := a - b;
end;

function Calc(CalcFun: PCalc; a, b: integer): integer;//定义一个计算函数,计算结果由传进来的函数指针决定
begin
  Result := TCalc(CalcFun)(a, b);//调用函数指针CalcFun计算两个数
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(IntToStr(Calc(@FunA, 100, 10)));//传递加法函数到Calc函数内,会得到100+10的结果
end;

procedure TForm1.Button2Click(Sender: TObject);//传递减法函数到Calc函数内,会得到100-10的结果
begin
  ShowMessage(IntToStr(Calc(@FunB, 100, 10)));
end;

end.


[解决办法]
额!
已经有答案了!
呵呵!
[解决办法]
指针传参就是传参数的地址,(通常指针指向的内类占的字节比指针大)这样节省开销。引用类型作为形参,其实delphi都是传的指针

热点排行