C:函数指针解读

函数指针从名子上看就知道它也是一种指针,一个指向函数入口地址的指针,举个简单的例子来看看函数指针的用法。

 1、通过函数指针调用函数。

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. int Sum(int a, int b)  
  5. {  
  6.     return a + b;  
  7. }  
  8.   
  9. int Sub(int a, int b)  
  10. {  
  11.     return a - b;  
  12. }  
  13.   
  14. int main(int argc, char *argv[])  
  15. {  
  16.   int iTmp = 0;  
  17.   int (*pf)(intint); /*申明一个函数指针,它带有两个整形参数,返回一个整形*/  
  18.     
  19.   pf = Sum;            /*函数指针赋值,使其指向函数Sum*/  
  20.   iTmp = pf(20, 10);   /*调用*/  
  21.   printf("Sum is : %d\n", iTmp);  
  22.     
  23.   pf = Sub; /*使其指向函数Sub*/  
  24.   iTmp = pf(20, 10); /*调用*/   
  25.   printf("Sub is : %d\n", iTmp);   
  26.     
  27.   system("PAUSE");   
  28.   return 0;  
  29. }  

 运行结果:

[plain]  view plain copy print ?
  1. Sum is : 30  
  2. Sub is : 10  
  3. 请按任意键继续. . .  

2、函数指针做另一个函数的参数。

  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3.   
  4. int Sum(int a, int b)  
  5. {  
  6.     return a + b;  
  7. }  
  8.   
  9. int Sub(int a, int b)  
  10. {  
  11.     return a - b;  
  12. }  
  13.   
  14. /*定义函数指针类型*/  
  15. typedef int (*pfFun)(intint);  
  16.   
  17. /*带有函数指针参数的函数*/   
  18. int TestFun(int a, int b, pfFun pf)  
  19. {  
  20.     int i = 0;  
  21.     i = pf(a, b);  
  22.     return i;  
  23. }  
  24.   
  25. int main(int argc, char *argv[])  
  26. {  
  27.   int iTmp = 0;  
  28.     
  29.   iTmp = TestFun(20, 10, Sum); /*函数指针赋值为函数Sum*/   
  30.   printf("Tmp is: %d\n", iTmp);  
  31.     
  32.   iTmp = TestFun(20, 10, Sub); /*函数指针赋值为指针Sub*/   
  33.   printf("Tmp is: %d\n", iTmp);  
  34.     
  35.   system("PAUSE");    
  36.     
  37.   return 0;  
  38. }  
运行结果:

[plain]  view plain copy print ?
  1. Tmp is: 30  
  2. Tmp is: 10  
  3. 请按任意键继续. . .  

 第二种用法就是传说中的回调函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值