1.函數指針的數組定義方法:返回值類型( * 指針變量名[Number]) (形參列表)。
例如:
double add(double a,double b){};
double sub(double a,double b){};
double mul(double a,double b){};
double div1(double a,double b){};
double (*oper_func[])(double, double) = {add,sub,mul,div1};//函數指針的數組定義
2.函數指針是指向函數的指針變量。 因而“函數指針”本身首先應是指針變量,只不過該指針變量指向函數。這正如用指針變量可指向整型變量、字符型、數組壹樣,這裏是指向函數。C在編譯時,每壹個函數都有壹個入口地址,該入口地址就是函數指針所指向的地址。有了指向函數的指針變量後,可用該指針變量調用函數,就如同用指針變量可引用其他類型變量壹樣,在這些概念上是大體壹致的。函數指針有兩個用途:調用函數和做函數的參數。
3.函數指針的聲明方法為:
返回值類型( * 指針變量名) (形參列表);
“返回值類型”說明函數的返回類型,“( * 指針變量名)”中的括號不能省,括號改變了運算符的優先級。若省略整體則成為壹個函數說明,說明了壹個返回的數據類型是指針的函數,後面的“形參列表”表示指針變量指向的函數所帶的參數列表。例如:
int func(int x); /* 聲明壹個函數 */
int (*f) (int x); /* 聲明壹個函數指針 */
f = func; /* 將func函數的首地址賦給指針f */
或者使用下面的方法將函數地址賦給函數指針:
f = &func;
賦值時函數func不帶括號,也不帶參數,由於func代表函數的首地址,因此經過賦值以後,指針f就指向函數func(x)的代碼的首地址。
例子:
#include<stdio.h>int?max(int?x,int?y){return?(x>y?x:y);}
int?main(){
int?(*ptr)(int,?int);
int?a,?b,?c;
ptr?=?max;
scanf("%d%d",?&a,?&b);
c?=?(*ptr)(a,b);
printf("a=%d,?b=%d,?max=%d",?a,?b,?c);
return?0;
}