delphi函式指標 只有@@p才代表了函式指標本身的位址
assigned(p) 判斷是否為空
或者用 @p=nil 來判斷函式指標是不是為空
delphi中的函式指標實際上就是指標,只是在使用的時候有些不同
函式指標要先定義乙個函式型別,比如
typettestproc = procedure of object;
這是乙個最簡單的函式型別,沒有引數,也沒有返回值,並且要求是類的成員函式
類的成員函式其實就代表了呼叫的時候引數的不同,因為類的成員函式隱含著乙個物件引數,而不是顯式寫明,函式都是靜態的。
當然了,如果有過載就變成了虛函式指標表,其中的呼叫就複雜一些
函式型別可以定義乙個函式指標變數
varp: ttestproc;
這個指標變數是4自己的 pointer。可以與 pointer直接做轉換,但是要加上乙個 @,比如:
varp: ttestproc;
p1: poniter;
begin
p1:= @p;
@p:= p1;
end;
這裡的 p1 是乙個 pointer型別
當 p 被賦值成乙個真正的函式之後,就可以使用了,如下
p();
如果有引數可以直接加上引數,與普通的函式呼叫方法沒有什麼區別,如果需要取得函式指標本身的位址就需要
@@p;
加乙個 @ 其實就是為了防止歧義,因為 p 本身也可以當成函式來使用,所以用 @p 來代表指標,不過特殊情況下p 也可以代表乙個指標,比如
assigned(p);
這時候沒有歧義,所以不需要加上 @,當然也可以使用
assigned(@p);
其實 assigned() 函式的引數要求是乙個指標變數,用來判斷這個指標是不是為 nil,如果是則返回 false,如果不是則返回 true
總結:
p和 @p 都代表函式指標,只有@@p 才代表函式指標本身的位址,為了不產生歧義,所以有的時候需要使用 @p,有時候使用 p(比如 assigned(p))
一般在賦值的時候既可以使用 p 又可以使用 @p,而在比較的時候,必須使用 @p,這在編譯的時候就已經嚴格控制了,所以出現編譯錯誤的時候就可以考慮這方面的問題
delphi中函式指標的使用
delphi中可以通過函式指標把乙個函式作為引數來傳遞,然後在另外乙個函式中呼叫。1 首先,申明函式指標型別tfunctionparameter type tfunctionparameter function const value integer string 函式指標 2 定義準備被作為引數傳...
delphi中的指標
從最初的 pascal 發展至今 的object pascal 可以說在指標運用上,絲毫不會遜色於 c語言的指標。以下內容分為八個部分,分別是 一 型別指標的定義 二 無型別指標的定義 三 指標的解除引用 四 取位址 指標賦值 五 指標運算 六 動態記憶體分配 七 字元陣列的運算 八 函式指標 對於...
delphi中的指標
從最初的 pascal 發展至今 的object pascal 可以說在指標運用上,絲毫不會遜色於 c語言的指標。以下內容分為八個部分,分別是 一 型別指標的定義 二 無型別指標的定義 三 指標的解除引用 四 取位址 指標賦值 五 指標運算 六 動態記憶體分配 七 字元陣列的運算 八 函式指標 對於...