函式指標與typedef

2021-04-25 11:12:30 字數 3191 閱讀 7459

(一)簡單的函式指標的應用。

// 形式

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 認識到它是乙個指向某種函式的指標,...