Delphi中的函式指標判斷是否為空

2022-04-11 01:02:24 字數 1283 閱讀 4400

delphi函式指標 只有@@p才代表了函式指標本身的位址

assigned(p) 判斷是否為空

或者用 @p=nil 來判斷函式指標是不是為空

delphi中的函式指標實際上就是指標,只是在使用的時候有些不同

函式指標要先定義乙個函式型別,比如

type

ttestproc = procedure of object;

這是乙個最簡單的函式型別,沒有引數,也沒有返回值,並且要求是類的成員函式

類的成員函式其實就代表了呼叫的時候引數的不同,因為類的成員函式隱含著乙個物件引數,而不是顯式寫明,函式都是靜態的。

當然了,如果有過載就變成了虛函式指標表,其中的呼叫就複雜一些

函式型別可以定義乙個函式指標變數

var

p: ttestproc;

這個指標變數是4自己的 pointer。可以與 pointer直接做轉換,但是要加上乙個 @,比如:

var

p: 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語言的指標。以下內容分為八個部分,分別是 一 型別指標的定義 二 無型別指標的定義 三 指標的解除引用 四 取位址 指標賦值 五 指標運算 六 動態記憶體分配 七 字元陣列的運算 八 函式指標 對於...