美文网首页
函数指针(回调函数)代码例子

函数指针(回调函数)代码例子

作者: yikemi | 来源:发表于2017-07-06 21:06 被阅读9次
1       #include<stdio.h>
2       #include <assert.h>
3       double GetMin(double *dbData, int iSize)               // 求最小值
4       {
5           double dbMin;
6           int i;
7      
8           assert(iSize>0);
9           dbMin=dbData[0];
10          for (i=1; i<iSize; i++){
11                if (dbMin>dbData[i]) {
12                     dbMin=dbData[i];
13                }
14          }
15          return dbMin;
16     }
17
18     double GetMax(double *dbData, int iSize)               // 求最大值
19     {
20         double dbMax;
21         int i;
22
23         assert(iSize>0);
24         dbMax=dbData[0];
25         for (i=1; i<iSize; i++){
26             if (dbMax< dbData[i]) {
27                 dbMax=dbData[i];
28             }
29         }
30         return dbMax;
31     }
32
33     double GetAverage(double *dbData, int iSize)            // 求平均值
34     {
35         double dbSum=0;
36         int i;
37    
38         assert(iSize>0);
39         for (i=0; i<iSize; i++)
40         {
41              dbSum+=dbData[i];
42         }
43         return dbSum/iSize;
44     }
45
46     double UnKnown(double *dbData, int iSize)             // 未知算法
47     {
48         return 0;
49     }
50
51     typedef double (*PF)(double *dbData, int iSize);     // 定义函数指针类型
52     PF GetOperation(char c)                              // 根据字符得到操作类型,返回函数指针
53     {
54         switch (c)
55         {
56           case 'd':
57                     return GetMax;//返回函数名相当于返回一个指针名
58           case 'x':
59                     return GetMin;
60           case 'p':
61                     return GetAverage;
62           default:
63                     return UnKnown;
64           }
65     }
66
67     int main(void)
68     {
69          double dbData[]={3.1415926, 1.4142, -0.5,999, -313, 365};
70          int iSize=sizeof(dbData)/sizeof(dbData[0]);
71          char c;
72
73          printf("Please input the Operation :\n");
74          c=getchar();
75          printf("result is %lf\n", GetOperation(c)(dbData,iSize));   // 通过函数指针调用函数
76    }

上述程序中前面4个函数分别实现求最大值、最小值、平均值和未知算法,然后实现了GetOperation函数。这个函数根据字符的返回值实现上面4个函数。它是以函数指针的形式返回的,从后面的main函数的GetOperation(c)(dbData, iSize)可以看出,通过这个指针可以调用函数。

返回函数名相当于返回一个指针名。返回值的类型匹配。
函数名本身是一个指针类型。函数指针

如果定义:
int* func()与int *p

有如下的关系:

func   《====》p
func() 《====》*p

相关文章

  • 函数指针(回调函数)代码例子

    上述程序中前面4个函数分别实现求最大值、最小值、平均值和未知算法,然后实现了GetOperation函数。这个函数...

  • 函数指针算法库

    函数指针, 函数指针数组声明 通过参数指定回调函数,代码示例 算法库代码说明 argc:参数个数 argv:回调函...

  • C语言基础知识点

    函数指针与回调函数 1、函数指针:函数指针是指向函数的指针变量,以下实例声明了函数指针变量 p,指向函数 max:...

  • javascript回调函数、递归函数

    javascript回调函数、递归函数 一、回调函数 通过函数的指针来调用函数(把一个函数的指针作为另一个函数的参...

  • C 指针区分

    看下如下各种的区别: 数组指针例子: 指针数组: 查找字符串的例子: 数组名字相当于指针: 函数指针: 回调小例子:

  • Node.js-回调函数

    回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被...

  • JS 回调函数浅析

    回调函数:回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被...

  • 函数指针之回调函数和转移表

    函数指针之回调函数和转移表 《C和指针》261页函数指针的用途: 对不同的数据类型作相同的操作->回调函数 对相同...

  • 异步的解决方案

    回调 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来...

  • 回调函数(callback)是什么?

    百科:回调函数 回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个...

网友评论

      本文标题:函数指针(回调函数)代码例子

      本文链接:https://www.haomeiwen.com/subject/kjohhxtx.html