一 函式指標是什麼
1.函式指標是指標
2.函式指標該如何宣告?
我們可以和int型別的指標的宣告進行比對一下:
宣告乙個int型指標:
int *p ;
宣告乙個函式型(假如是乙個有兩個int型別的引數以及乙個 int型別的返回值)的指標:
int (*pfunc)(int, int);
我們把指標名稱提出來看一下,
整形指標
函式指標
int *
int (*)(int, int)
二者不同的只是 函式指標多了乙個引數列表
3.函式指標的使用
既然是指標,那就要指向乙個位址,變數有位址, 函式同樣有位址。
我們再來比對一下;
1.int型指標的使用:
#includeint main()
int add(int a, int b)
由此可以看出, 函式指標和指標的使用是有異曲同工之妙的,無非是多了乙個引數列表。
二 typedef函式指標的用法
1.typedef介紹
首先來看看typedef和define的比較:
2.typedef 的用法
1.typedef 」起別名「 的方式是這樣的:
typedef structstudent;
// 此時, 我們就可以使用my_type來定義該結構體的例項了。
student student_one;
可以總結為:typedef 原變數型別 別名
那我們用來為函式指標起別名:
typedef int (*pfun)(int, int);
沒看懂? 換個展示方式:
typedef int(*)(int, int) pfun; // 你好像不能這麼去寫, 不過可以這麼去看。所以還是要按照上面的方式去寫
這樣看就對應了typedef 原變數型別 別名的使用方式。
我們可以解釋為:這個宣告引入了 pfun 型別作為 函式指標(引數:兩個int型別, 返回值:int)的別名。
2.typedef為函式指標起別名
第一大節的main函式中,我們使用 int(*pfun)(int, int)的方式宣告了乙個 pfun函式指標,這次我們用typedef來為函式起個別名。
#include // 用typedef 為函式指標起別名。 相當於 typedef int(*)(int, int) pfun
typedef int(*fpun)(int, int);
int add(int a, int b);
int main()
int add(int a, int b)
三 實踐
1.實現 根據輸入不同的運算子,呼叫不同的函式進行加減乘除的運算, 並輸出結果
先說明幾點~
直接上**
#include // 為函式指標起乙個別名pfun 函式指標指向返回型別為int, 引數為兩個int 的函式
typedef int (*pfun)(int, int);
int add(int a, int b);
int sub(int a, int b);
int mul(int a, int b);
int div(int a, int b);
// 宣告乙個函式, 用函式指標pfun做返回值, 所以該函式可以說是指標函式
pfun calc_func(char op);
int calculate(int a, int b, char op);
int main()
int add(int a, int b)
int sub(int a, int b)
int mul(int a, int b)
int div(int a, int b)
// 判斷輸入的字元op, 返回不同的函式位址 (函式的位址就是函式名字)
pfun calc_func(char op)
// 指標可以指向空啊, 所以函式指標也可以
return null;
}int calculate(int a, int b, char op)
return -1;
}
文章參考: 函式指標與函式宣告
問題 當計算機啟動時,硬體將呼叫首位址為0的子例程,為了模擬開機啟動時的情形,如何設計出乙個c語句,以顯示呼叫該子例程。換個問法 有一段程式儲存在起始位址為 0的一段記憶體上,如果我們想要呼叫這段程式,請問該如何去做?c陷阱與缺陷 給出答案 void 0 相關知識 函式指標 函式指標是指向函式的指標...
C 中指標函式與函式指標的使用
指標函式 指標函式是乙個函式,只不過指標函式返回的型別是某一型別的指標。格式 型別名 函式名 函式引數列表 使用 指標函式,返回int 指標變數 int add int a,int b int main 函式指標 函式指標是指向函式的指標變數。所以函式指標其實是指標變數,只不過該指標變數指向函式。格...
函式指標的宣告
typedef函式指標的宣告與其他型別的宣告有所不同,主要遵守右左法則,具體的解釋如下 1.1 解讀的原則 右左原則 右左法則 首先從最裡面的圓括號看起,然後往右看,再往左看。每當遇到圓括號時,就應該掉轉閱讀方向。一旦解析完圓括號裡面所有的東西,就跳出圓括號。重複這個過程直到整個宣告解析完畢。個人認...