關於函式指標

2021-04-29 02:14:47 字數 979 閱讀 9904

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

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

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

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

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

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

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

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

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

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

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

void* a=;

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

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

又乙個函式指標的例子:

函式指標 關於函式指標與指標函式

指標函式顧名思義,本質還是函式,不同的是改函式的返回型別為指標型別。接下來我們舉個例子。include using namespace std char output intmain 這裡的char output 就是個指標函式 char 的函式,即返回值為char 型別的。這裡的 如果gcc g ...

關於函式指標與指標函式

函式指標 在程式執行中,函式 是程式的演算法指令部分,它們和陣列一樣也占用儲存空間,都有相應的位址。可以使用指標變數指向陣列的首位址,也可以使用指標變數指向函式 的首位址,指向函式 首位址的指標變數稱為函式指標。1 函式指標定義 函式型別 指標變數名 形參列表 函式型別 說明函式的返回型別,由於 的...

關於函式指標

函式指標在c c 中的應用是有所區別的,如 int add int x1,int x2 return x1 x2 int main void ctest test int ctest f int,int f add int nret this f 1,2 為什麼一定要註明this 呢?是需要指明這個...