在C中,與普通資料指針(int *,char *等)一樣,也可以宣告指向函數的指針,即函數指針。那麼如何聲明?以下這篇文章就來帶大家了解一下宣告函數指標的方法,希望對大家有幫助。 【影片教學推薦:C語言教學】
#如何宣告指向函數的指標?
首先我們了解如何在C中建立一個指向整數的指標?
int * ptrInteger; / *我们在int和ptrInteger之间放置了一个*运算符来创建指针。* /
這裡的ptrInteger就是一個指向整數的指標。如果可以理解這一點,那麼從邏輯上講,我們在聲明指向函數的指標時應該沒有任何問題了。
接下來讓我們來看看如何宣告一個函數?例如:
int foo(int);
這裡的foo就是一個回傳並接受一個int型別參數的函數。因此,邏輯上會被認為,只要在int和foo(int)之間放置一個*運算符就應該創建一個指向函數的指針,即:
int * foo(int);
但,這是不對的;因為, c運算子優先權在這裡也起作用,運算子()將優先於運算子*。上面的宣告意味著:一個函數foo,其中一個參數為int類型,傳回值為int *即整數指標;這不是我們想要的,所以我們還需要考慮c運算子優先權。
因此,我們必須以某種方式將*運算子與foo綁定。為此,我們將使用()運算子來更改C運算子的預設優先權。例:
int (*foo)(int);
*運算子與foo一起使用,而foo是函數名,這樣就宣告來一個指向函數的指標了。
函數指標的使用範例:
#include <stdio.h> // 具有int参数和void返回类型的普通函数 void fun(int a) { printf("a值为: %d\n", a); } int main() { // fun_ptr 是指向函数fun()的指针 void (*fun_ptr)(int) = &fun; /* 相当于下面两行 void (*fun_ptr)(int); fun_ptr = &fun; */ //使用fun_ptr调用fun() (*fun_ptr)(10); return 0; }
輸出:
說明:
1、與普通指標不同,函數指標指向程式碼,而不是資料。通常,函數指標會儲存可執行程式碼的開始。
2、與普通指標不同,我們不使用函數指標分配解除分配記憶體。
3、在函數指標中,函數的名稱也可用來取得函數的位址。
4、與一般資料指標一樣,函數指標可以當作參數傳遞,也可以從函數傳回。
以上就是這篇文章的全部內容,希望能對大家的學習有所幫助。更多精彩內容大家可以追蹤php中文網相關教學欄位! ! !
以上是C中如何宣告指向函數的指標?的詳細內容。更多資訊請關注PHP中文網其他相關文章!