函数指针指针函数

q236152 2011-11-12 11:58:54
#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));
getch();
}

周立功老师的一个例子,本人C菜鸟,想问下
typedef double (*PF)(double *dbData, int iSize); //函数指针
PF GetOperation(char c) //指针函数

1.我的注释对不
2.函数指针在用的时候应该先说明其指向哪,可是在程序中好像没有这样的声明语句啊
3.PF GetOperation(char c) 的返回值是怎么进入子函数的
...全文
93 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xglmsfirst 2011-11-13
  • 打赏
  • 举报
回复
帮你顶下。。长得不想看
AnYidan 2011-11-13
  • 打赏
  • 举报
回复
函数指针也是指针,使用前必须初始化
绿领巾童鞋 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 jixingzhong 的回复:]
typedef double (*PF)(double *dbData, int iSize);

这只是在typedef一个类型,这个类型是函数指针,
然后需要 PF ***;定义一个变量......
[/Quote]
+1
goldbeef 2011-11-13
  • 打赏
  • 举报
回复
(1)
typedef double (*PF)(double *dbData, int iSize); //定义函数指针 PF
PF GetOperation(char c) //一个返回值为 PF类型(函数指针)的函数
(2)
其实你也可以定义一个函数指针变量 即 PF pf=NULL;
然后给pf进行赋值操作,例如 pf=某个函数名;或者pf=返回值是函数指针的函数操作;
(3)GetOperation(c)(dbData,iSize)//先执行GetOperation(c)返回一个函数指针,然后将参数dbData,iSize传入该函数指针所指向的函数中
jixingzhong 2011-11-13
  • 打赏
  • 举报
回复
typedef double (*PF)(double *dbData, int iSize);

这只是在typedef一个类型,这个类型是函数指针,
然后需要 PF ***;定义一个变量......
Frog1228 2011-11-13
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 goldbeef 的回复:]
(1)
typedef double (*PF)(double *dbData, int iSize); //定义函数指针 PF
PF GetOperation(char c) //一个返回值为 PF类型(函数指针)的函数
(2)
其实你也可以定义一个函数指针变量 即 PF pf=NULL;
然后给pf进行赋值操作,例如 pf=某个函数名;或者pf=返回值是函数指针的函数操作;
(……
[/Quote]
+1

69,335

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧