您的位置:首页 > 其它

返回值为函数指针的示例

2013-08-19 16:51 288 查看
#include<stdio.h>
#include <assert.h>
double GetMin(double *dbData, int iSize)               // 求最小值
{
double dbMin;
int i;

assert(iSize>0);
dbMin=dbData[0];
for (i=1; i<iSize; i++){
if (dbMin>dbData[i]) {
dbMin=dbData[i];
}
}
return dbMin;
}

double GetMax(double *dbData, int iSize)                 // 求最大值
{
double dbMax;
int i;

assert(iSize>0);
dbMax=dbData[0];
for (i=1; i<iSize; i++){
if (dbMax< dbData[i]) {
dbMax=dbData[i];
}
}
return dbMax;
}

double GetAverage(double *dbData, int iSize)            // 求平均值
{
double dbSum=0;
int i;

assert(iSize>0);
for (i=0; i<iSize; i++)
{
dbSum+=dbData[i];
}
return dbSum/iSize;
}

double UnKnown(double *dbData, int iSize)             // 未知算法
{
return 0;
}

typedef double (*PF)(double *dbData, int iSize);     // 定义函数指针类型
PF GetOperation(char c)                              // 根据字符得到操作类型,返回函数指针
{
switch (c)
{
case 'd':
return GetMax;
case 'x':
return GetMin;
case 'p':
return GetAverage;
default:
return UnKnown;
}
}

int main(void)
{
double dbData[]={3.1415926, 1.4142, -0.5,999, -313, 365};
int iSize=sizeof(dbData)/sizeof(dbData[0]);
char c;

printf("Please input the Operation :\n");
c=getchar();
printf("result is %lf\n", GetOperation(c)(dbData,iSize));   // 通过函数指针调用函数
}


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

函数根据字符的返回值实现上面4个函数。它是以函数指针的形式返回的,从后面的main函数的GetOperation(c)

(dbData, iSize)可以看出,通过这个指针可以调用函数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: