指针函数和函数指针

来源:互联网 发布:数据分析师笔试题目 编辑:程序博客网 时间:2024/05/02 02:53
 
1.指针函数

指针函数:返回指针的函数。形式如下,

int *pfun(int, int);

其中*的优先级小于(),因此pfun表示为一个函数,函数返回一个指针,指向的内容为int型。

2.函数指针

函数指针:指向函数的指针变量

int (*pfun)(int, int);

通过括号强行将pfun首先与“*”结合,也就意味着,pfun是一个指针,接着与后面的“()”结合,说明该指针指向的是一个函数,然后再与前面的int结合,也就是说,该函数的返回值是int。由此可见,pfun是一个指向返回值为int的函数的指针。

3.函数指针作为函数返回值

上面的指针函数指向的是int型,一般还有char型等,还有一种少见指向类型为函数。例如:

int (*ff(int))(int *, int);

其中,ff是一个函数,接着与前面的“*”结合,说明ff函数的返回值是一个指针。

然后再与后面的“()”结合,也就是说,该指针指向的是一个函数。

这种写法看起来很难懂,可以用typedef,使得声明变得简单

typedef int (*PF)(int *, int);

这样就定义了返回值的类型。

再用PF作为返回值来声明函数:

PF ff(int)
程序清单 1  求最值与平均值示例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     }1718     double GetMax(double *dbData, int iSize)                 // 求最大值19     {20         double dbMax;21         int i;2223         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     }3233     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     }4546     double UnKnown(double *dbData, int iSize)             // 未知算法47     {48         return 0;49     }5051     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     }6667     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;7273          printf("Please input the Operation :\n");74          c=getchar();75          printf("result is %lf\n", GetOperation(c)(dbData,iSize));   // 通过函数指针调用函数76    }



 



 

原创粉丝点击