回覆列表
  • 1 # pnghy36400

    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,2006) ; ShowMessage(s) ; //will display "2006" s := DynamicFunction(Two,2006) ; ShowMessage(s) ; // will display "4012"end;

    5、其它說明一個指向函式的指標在賦值指向函式時,不需要顯示地取函式的地址。例:var F:function(X:Integer):Integer;...function aa(X:Integer):Integer;不需要: F:=^aa;只要:F:=aa;就可以了。F:=aa可能是一個函式型別變數賦值,也可能是呼叫aa函式過程。如果F不是一個函式過程型別,它就是一個函式呼叫。但是隻要是出現在表示式中,就一定是函式過程的呼叫。例:if A:=fun thenA:=fun一定是一個函式過程的呼叫,將返回值賦予A注意,如果fun是一個過程(它沒有返回值)或它需要引數(需要寫上引數),那就會產生語法錯誤。如果要顯示說明它是一個賦值語句而不是函式過程的呼叫,可以這樣寫if @A :=@fun then@A是將A轉換成一個無型別指標(它本身就是以指標形式存在)@fun是取得函式過程fun的地址可以透過@@A的方式取得該過程函式變數的地址,而不是它指向的函式過程的地址。

  • 中秋節和大豐收的關聯?
  • 金立手機怎麼設定來電頭像?