(一)簡單的函式指標的應用。
// 形式
1:返回型別
(*函式名
)(參數列
)char (*pfun)(int);
char glfun(int a)
void main()
第一行定義了乙個指標變數
pfun
。首先我們根據前面提到的「形式
1」認識到它是乙個指向某種函式的指標,這種函式引數是乙個
int型,返回值是
char
型別。只有第一句我們還無法使用這個指標,因為我們還未對它進行賦值。
第二行定義了乙個函式
glfun()
。該函式正好是乙個以
int為引數返回
char
的函式。我們要從指標的層次上理解函式
——函式的函式名實際上就是乙個指標,函式名指向該函式的**在記憶體中的首位址。
然後就是可愛的
main()
函式了,它的第一句您應該看得懂了
——它將函式
glfun
的位址賦值給變數
pfun
。main()
函式的第二句中
「*pfun」
顯然是取
pfun
所指向位址的內容,當然也就是取出了函式
glfun()
的內容,然後給定引數為2。
(二)使用
typedef更直觀更方便。
// 形式2:
typedef
返回型別
(*新型別
)(參數列
)typedef char (*ptrfun)(int);
ptrfun pfun;
char glfun(int a)
void main()
typedef
的功能是定義新的型別。第一句就是定義了一種
ptrfun
的型別,並定義這種型別為指向某種函式的指標,這種函式以乙個
int為引數並返回
char
型別。後面就可以像使用
int,char
一樣使用
ptrfun
了。第二行的**便使用這個新型別定義了變數
pfun
,此時就可以像使用形式
1一樣使用這個變數了。
(三)在
c++類中使用函式指標。
// 形式3:
typedef
返回型別(類名
::*新型別
)(參數列
)class ca
};
ca ca;
typedef char (ca::*ptrfun)(int);
ptrfun pfun;
void main()
在這裡,指標的定義與使用都加上了
「類限制」或
「物件」,用來指明指標指向的函式是那個類的這裡的類物件也可以是使用
new得到的。比如:
ca *pca = new ca;
pca->(*pfun)(2);
delete pca;
而且這個類物件指標可以是類內部成員變數,你甚至可以使用
this
指標。比如:類ca
有成員變數
ptrfun m_pfun;
void ca::lcfun2()
一句話,使用類成員函式指標必須有
「->*」
或「.*」
的呼叫。
另外,c 的函式名,就是位址,函式名取位址,還是一樣,所以p() ,(*p)() 都可以呼叫函式。pfun(2)是標準c++的寫法,(*pfun)(2)這是相容c語言的標準寫法,兩種同意,但注意區分,避免寫的程式產生移植性問題!
函式指標同樣是可以作為引數傳遞給函式的,下面我們看個例子,仔細閱讀你將會發現它的用處,稍加推理可以很方便我們進行一些複雜的程式設計工作。
#include
#include
using namespace std;
int test(int);
int test2(int (*ra)(int),int);
void main(int argc,char* argv)
void t2()
void t3()
void main(int argc,char* argv)
; cout<<"比較t1()的記憶體位址和陣列a[0]所儲存的位址是否一致"《仔細看上面的例子可能不用我多說大家也會知道是怎麼一會事情了,最後我們做乙個重點小結,只要記住這一點,對於理解利用函式指標構成陣列進行函式間接呼叫就很容易了!
void* a=;
cout<<"比較t1()的記憶體位址和陣列a[0]所儲存的位址是否一致"《上面的這一小段中的錯誤行,為什麼不能這麼呼叫呢?
前一篇教程我們已經說的很清楚了,不過在這裡我們還是複習一下概念, 指標陣列元素所儲存的只是乙個記憶體位址,既然只是個記憶體位址就不可能進行a[0]()這樣位址帶括號的操作,而函式指標不同它是乙個例外,函式指標只所以 這麼叫它就是因為它是指向函式指向記憶體的**區的指標,它被系統授予允許與()括號操作的權利,進行間接的函式呼叫,既然函式指標允許這麼操作,那麼被定 義成函式指標的陣列就一定是可以一樣的操作的。
關於函式指標的重要性,有一篇文章特別進行了說明,**如下:
函式指標與typedef
關於c 中函式指標的使用 包含對typedef用法的討論 一 簡單的函式指標的應用。形式1 返回型別 函式名 參數列 char pfun int char glfun int a void main 第一行定義了乙個指標變數pfun。首先我們根據前面提到的 形式1 認識到它是乙個指向某種函式的指標,...
函式指標與typedef
關於c 中函式指標的使用 包含對typedef用法的討論 一 簡單的函式指標的應用。形式1 返回型別 函式名 參數列 char pfun int char glfun int a void main 第一行定義了乙個指標變數pfun。首先我們根據前面提到的 形式1 認識到它是乙個指向某種函式的指標,...
函式指標與typedef
關於c 中函式指標的使用 包含對typedef用法的討論 一 簡單的函式指標的應用。形式1 返回型別 函式名 參數列 char pfun int char glfun int a void main 第一行定義了乙個指標變數pfun。首先我們根據前面提到的 形式1 認識到它是乙個指向某種函式的指標,...