函式存放在記憶體的**區域內,它們同樣有位址,我們如何能獲得函式的位址呢?
如果我們有乙個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)
void t2()
void t3()
void main(int argc,char* argv)
; cout<<"比較t1()的記憶體位址和陣列a[0]所儲存的位址是否一致"
fp b=; //利用自定義型別fp把b定義趁乙個指向函式的指標陣列
b[0]();//現在利用指向函式的指標陣列進行下標操作就可以進行函式的間接呼叫了;
cin.get();
}仔細看上面的例子可能不用我多說大家也會知道是怎麼一會事情了,最後我們做乙個重點小結,只要記住這一點,對於理解利用函式指標構成陣列進行函式間接呼叫就很容易了!
void* a=;
cout<<"比較t1()的記憶體位址和陣列a[0]所儲存的位址是否一致"
前一篇教程我們已經說的很清楚了,不過在這裡我們還是複習一下概念,指標陣列元素所儲存的只是乙個記憶體位址,既然只是個記憶體位址就不可能進行a[0]()這樣位址帶括號的操作,而函式指標不同它是乙個例外,函式指標只所以這麼叫它就是因為它是指向函式指向記憶體的**區的指標,它被系統授予允許與()括號操作的權利,進行間接的函式呼叫,既然函式指標允許這麼操作,那麼被定義成函式指標的陣列就一定是可以一樣的操作的。
摘自:[url]
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 病人...