C C 中函式指標的含義

2021-04-30 05:41:54 字數 2094 閱讀 7472

函式存放在記憶體的**區域內,它們同樣有位址,我們如何能獲得函式的位址呢?

如果我們有乙個int test(int a)的函式,那麼,它的位址就是函式的名字,這一點如同陣列一樣,陣列的名字就是陣列的起始位址。

定義乙個指向函式的指標用如下的形式,以上面的test()為例:

int (*fp)(int a);//這裡就定義了乙個指向函式的指標

函式指標不能絕對不能指向不同型別,或者是帶不同形參的函式,在定義函式指標的時候我們很容易犯如下的錯誤。

int *fp(int a);//這裡是錯誤的,因為按照結合性和優先順序來看就是先和()結合,然後變成了乙個返回整形指標的函式了,而不是函式指標,這一點尤其需要注意!

下面我們來看乙個具體的例子:

#include  

#include  

using

namespace std; 

int test(int a); 

void

main(int

argc,char* argv)   

int test(int a) 

typedef定義可以簡化函式指標的定義,在定義乙個的時候感覺不出來,但定義多了就知道方便了,上面的**改寫成如下的形式:

#include  

#include  

using

namespace std; 

int test(int a); 

void

main(int

argc,char* argv)   

int test(int a) 

函式指標同樣是可以作為引數傳遞給函式的,下面我們看個例子,仔細閱讀你將會發現它的用處,稍加推理可以很方便我們進行一些複雜的程式設計工作。

//-------------------該例以上乙個例子作為基礎稍加了修改----------------------------- 

#include    

#include    

using

namespace std;   

int test(int);   

int test2(int (*ra)(int),int); 

void

main(int

argc,char* argv)     

int test(int a) 

int test2(int (*ra)(int),int b)//這裡定義了乙個名字為ra的函式指標 

利用函式指標,我們可以構成指標陣列,更明確點的說法是構成指向函式的指標陣列,這麼說可能就容易理解的多了。

#include    

#include    

using

namespace std; 

void t1() 

void t2() 

void t3() 

void

main(int

argc,char* argv)     

;  cout

<<"比較t1()的記憶體位址和陣列a[0]所儲存的位址是否一致"typedef

void (*fp)();//自定義乙個函式指標型別 

fp b=; //利用自定義型別fp把b定義趁乙個指向函式的指標陣列 

b[0]();//現在利用指向函式的指標陣列進行下標操作就可以進行函式的間接呼叫了; 

cin.get(); 

} 仔細看上面的例子可能不用我多說大家也會知道是怎麼一會事情了,最後我們做乙個重點小結,只要記住這一點,對於理解利用函式指標構成陣列進行函式間接呼叫就很容易了!

void* a=;

cout<<"比較t1()的記憶體位址和陣列a[0]所儲存的位址是否一致"《上面的這一小段中的錯誤行,為什麼不能這麼呼叫呢?

前一篇教程我們已經說的很清楚了,不過在這裡我們還是複習一下概念,指標陣列元素所儲存的只是乙個記憶體位址,既然只是個記憶體位址就不可能進行a[0]()這樣位址帶括號的操作,而函式指標不同它是乙個例外,函式指標只所以這麼叫它就是因為它是指向函式指向記憶體的**區的指標,它被系統授予允許與()括號操作的權利,進行間接的函式呼叫,既然函式指標允許這麼操作,那麼被定義成函式指標的陣列就一定是可以一樣的操作的。

C C 中函式指標的含義

函式存放在記憶體的 區域內,它們同樣有位址,我們如何能獲得函式的位址呢?如果我們有乙個int test int a 的函式,那麼,它的位址就是函式的名字,這一點如同陣列一樣,陣列的名字就是陣列的起始位址。定義乙個指向函式的指標用如下的形式,以上面的test 為例 int fp int a 這裡就定義...

C C 中函式指標的含義

函式存放在記憶體的 區域內,它們同樣有位址,我們如何能獲得函式的位址呢?如果我們有乙個int test int a 的函式,那麼,它的位址就是函式的名字,這一點如同陣列一樣,陣列的名字就是陣列的起始位址。定義乙個指向函式的指標用如下的形式,以上面的test 為例 int fp int a 這裡就定義...

C C 的函式指標

病人 醫生,我折騰了許久,無法理解函式指標。中醫 能意識到自己不理解,不錯。那麼你說說你目前的理解。函式指標是什麼?病人 函式指標是指向函式的指標。中醫 那麼函式是什麼?病人 函式就是函式。中醫 不是指向函式的指標?病人 自然不是。中醫 那函式怎麼可以賦值給函式指標?難道int可以賦值給int 病人...