若在程式中定義了乙個函式,在程式編譯的時候,編譯系統會給這段函式**分配一段記憶體空間,這段記憶體空間的起始位址稱為這個函式的指標(函式名實質就是函式這段**的起始位址)。
定義指向函式的指標變數的一般形式:
型別名(*指標變數)(函式引數表列)
這裡的「型別名」是指函式返回值的型別;
由於優先順序的關係「 * 指標變數名」要用圓括號括起來,若不括起來則變成 「型別名 *指標變數(函式引數表列)」,這樣則定義了乙個函式,該函式返回乙個型別指標變數。
形式舉例:
int(*p)(int,int);
定義p是乙個指向函式的指標變數,它指向含有兩個int型引數的函式,並且返回乙個int型的值。
函式舉例:
執行結果如下圖所示:/*
* 模擬乙個計算器,加減乘除
* 返回值是int型別
*/#include
/*函式宣告*/
int add(int a,int b);
intsub(int a,int b);
int mul(int a,int b);
int div(int a,int b);
int (*p)(int,int);//宣告函式指標,指向返回值型別為int,有兩個引數型別都是int的函式
int main(void)
while(c=='\n');
switch(c)
result=(*p)(a,b);
printf("%d
%c%d = %d\n",a,c,b,result);
return0;}
int add(int a,int b)
intsub(int a,int b)
int mul(int a,int b)
int div(int a,int b)
有時候,我們可以用到typedef,因為有時候自定義型別太長,使用typedef給自定義型別重新命名乙個簡短的名字。
舉例:
執行結果如下圖所示:#include
int max(int a, int b);
int min(int a, int b);
typedef int (*f)(int, int); // 宣告函式指標,指向返回值型別為int,有兩個引數型別都是int的函式
int main(void)
int max(int a, int b)
int min(int a, int b)
參考資料:
1.朱友鵬,張先鳳.嵌入式linux與物聯網軟體開發.北京:人民郵電出版社,2017.
2.譚浩強.c程式設計(第四版).北京:清華大學出版社,2010.
3.4.
通過函式指標呼叫函式
指標可以不但可以指向乙個整形,浮點型,字元型,字串型的變數,也可以指向相應的陣列,而且還可以指向乙個函式。乙個函式在編譯的時候會被分配給乙個入口位址。這個函式入口位址稱為函式的指標。可以用乙個指標變數指向函式,然後通過該指標變數呼叫此函式。定義指向函式的指標變數的方法是 int p int int ...
通過函式指標呼叫函式
指標可以不但可以指向乙個整形,浮點型,字元型,字串型的變數,也可以指向相應的陣列,而且還可以指向乙個函式。乙個函式在編譯的時候會被分配給乙個入口位址。這個函式入口位址稱為函式的指標。可以用乙個指標變數指向函式,然後通過該指標變數呼叫此函式。定義指向函式的指標變數的方法是 int p int int ...
使用指標呼叫函式
指向函式的指標的定義形式 資料型別 指標變數名 函式引數表列 double x,y,z scanf lf lf x,y z max x,y printf max num is lf z 以上是主函式中的內容,表示輸入x,y兩個雙精度浮點數,然後呼叫max函式求出,試執行結果如下 請輸入要比較大小的兩...