函数指针是定义一个指针指向函数的首地址,并可以调用
#include <stdio.h> int max(int x, int y) { return x > y ? x : y; } int main(void) { int (*p)(int ,int) = &max; int a, b, c, d; printf("input three num: \n"); scanf("%d %d %d", &a, &b, &c); d = p(p(a,b),c); printf("&max addr is %d\n",&max); printf("max addr is %d\n",max); printf("p addr is %d\n",p); printf("&p addr is %d\n",&p); printf("max num : %d \n",d); return 0; }

从运行结果可以发现 函数指针指向了 max ,这样就可以调用max
可以注意到 函数max &max 和 p 指向的地址都是一样的 注意p的地址和他们不一样 p存储的是max地址或者说指向max地址
#include <stdio.h> typedef int (*PFUN)(int,int); int max(int a,int b) { return a > b ? a : b; } int main() { PFUN pfun; pfun = max; int result = pfun(3,4); printf("result : %d\n",result); }
最后结果为4 用typedef 就定义了这种类型的函数指针 类似于结构体定义 这样可以通过PFUN来定义这种类型的函数指针
那么它的应用 可以见下面的例子:
#include <stdio.h> typedef int (*FP_CALC)(int,int); // 定义一个函数指针类型 FP_CALC int add(int a, int b) { return a+b; } int sub(int a, int b) { return a-b; } int mul(int a, int b) { return a*b; } int div(int a, int b) { return b ? a/b : -1; } // 定义一个函数 返回值为 FP_CALC 其中 add sub mul div 函数头其实都是函数的开始地址 也就是可以看作函数指针 // 通过'+ - * /' 来判断返回哪个函数指针 进行调用 FP_CALC calc_func(char op) { switch(op) { case '+': return add; case '-': return sub; case '*': return mul; case '/': return div; default: return NULL; } } // 定义计算函数,通过判断传的是什么符号 调用什么运算 int calc(int a, int b, char op) { FP_CALC func; func = calc_func(op); return func(a,b); } void main() { int a = 100, b = 20; printf("a + b = %d\n",calc(a,b,'+')); printf("a - b = %d\n",calc(a,b,'-')); printf("a * b = %d\n",calc(a,b,'*')); printf("a / b = %d\n",calc(a,b,'/')); }
浙公网安备 33010602011771号