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...