Delphi 函式指標 過程 函式型別

2022-08-20 03:39:09 字數 1701 閱讀 2120

pascal 中的過程型別與c語言中的函式指標相似,為了統一說法,以下稱函式指標。函式指標的宣告只需要引數列表;如果是函式,再加個返回值。下面講解指向非物件(一般的)函式/過程的函式指標。

例如宣告乙個過程型別,該型別帶乙個通過引用傳遞的整型引數:

type

intproc = procedure (var num: integer); //intproc是指向過程的函式指標

這個過程型別與任何引數完全相同的例程相容,即用它宣告的變數,可以指向任何此類函式,並通過其進行函式的呼叫。

下面是乙個相容例程:

proceduredoublethevalue (varvalue: integer);beginvalue := 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) 上面這個動態函式的使用例項

vars : string;

begin

s := dynamicfunction(one,2011) ;

showmessage(s) ; //will display "2006"

s := dynamicfunction(two,2011) ;

showmessage(s) ; // will display "4022"

end;

Delphi指標相關函式

1.addr var i integer nodenumbers array 0 100 of integer begin with treeview1 do begin for i 0 to items.count 1 do begin nodenumbers i calculatevalue i...

Delphi函式和過程

過程無返回值,函式有返回值。procedure myproc m,n integer o string p single 2.5 q string delphi 如上例所示,過程宣告和定義中,多個引數是用分號隔開的,但在呼叫時是用逗號隔開的 eg myproc 3,4,me 3.14 上例中省略了最...

類函式指標和普通函式指標

我們都看慣了一般的函式指標,但是關於類的函式指標又是怎樣的呢?它的靜態函式指標和非靜態函式指標是一樣的麼?cpp view plain copy font size 18px include using namespace std typedef int pmax int,int 普通函式指標 in...