| 函数指针从名子上看就知道它也是一种指针,一个指向函数入口地址的指针,举个简单的例子来看看函数指针的用法。 1、通过函数指针调用函数。
[cpp] #include <stdio.h> #include <stdlib.h>
int Sum(int a, int b) { return a + b; }
int Sub(int a, int b) { return a - b; }
int main(int argc, char *argv[]) { int iTmp = 0; int (*pf)(int, int); /*申明一个函数指针,它带有两个整形参数,返回一个整形*/ pf = Sum; /*函数指针赋值,使其指向函数Sum*/ iTmp = pf(20, 10); /*调用*/ printf("Sum is : %d\n", iTmp); pf = Sub; /*使其指向函数Sub*/ iTmp = pf(20, 10); /*调用*/ printf("Sub is : %d\n", iTmp); system("PAUSE"); return 0; } #include <stdio.h> #include <stdlib.h> int Sum(int a, int b) { return a + b; } int Sub(int a, int b) { return a - b; } int main(int argc, char *argv[]) { int iTmp = 0; int (*pf)(int, int); /*申明一个函数指针,它带有两个整形参数,返回一个整形*/
pf = Sum; /*函数指针赋值,使其指向函数Sum*/ iTmp = pf(20, 10); /*调用*/ printf("Sum is : %d\n", iTmp);
pf = Sub; /*使其指向函数Sub*/ iTmp = pf(20, 10); /*调用*/ printf("Sub is : %d\n", iTmp);
system("PAUSE"); return 0; }
运行结果:
[plain] Sum is : 30 Sub is : 10 请按任意键继续. . . Sum is : 30 Sub is : 10 请按任意键继续. . .
2、函数指针做另一个函数的参数。
[cpp] #include <stdio.h> #include <stdlib.h>
int Sum(int a, int b) { return a + b; }
int Sub(int a, int b) { return a - b; }
/*定义函数指针类型*/ typedef int (*pfFun)(int, int);
/*带有函数指针参数的函数*/ int TestFun(int a, int b, pfFun pf) { int i = 0; i = pf(a, b); return i; }
int main(int argc, char *argv[]) { int iTmp = 0; iTmp = TestFun(20, 10, Sum); /*函数指针赋值为函数Sum*/ printf("Tmp is: %d\n", iTmp); iTmp = TestFun(20, 10, Sub); /*函数指针赋值为指针Sub*/ printf("Tmp is: %d\n", iTmp); system("PAUSE"); return 0; } #include <stdio.h> #include <stdlib.h> int Sum(int a, int b) { return a + b; } int Sub(int a, int b) { return a - b; } /*定义函数指针类型*/ typedef int (*pfFun)(int, int); /*带有函数指针参数的函数*/ int TestFun(int a, int b, pfFun pf) { int i = 0; i = pf(a, b); return i; } int main(int argc, char *argv[]) { int iTmp = 0;
iTmp = TestFun(20, 10, Sum); /*函数指针赋值为函数Sum*/ printf("Tmp is: %d\n", iTmp);
iTmp = TestFun(20, 10, Sub); /*函数指针赋值为指针Sub*/ printf("Tmp is: %d\n", iTmp);
system("PAUSE");
return 0; }运行结果:
[plain] Tmp is: 30 Tmp is: 10 请按任意键继续. . . Tmp is: 30 Tmp is: 10 请按任意键继续. . .
第二种用法就是传说中的回调函数。
摘自 Socrates的专栏
| |