读书人

c语言中用一个函数指针作为另一个函数

发布时间: 2012-05-20 16:03:12 作者: rapoo

c语言中用一个函数指针作为另一个函数的参数
#include<stdio.h>
void main()
{
int max(int x,int y);
int min(int x,int y);
int method(int *p,int x,int y);
int a,b,c;
scanf("%d%d",a,b);
int (*p)(int x,int y);
p = max;
int (*q)(int x,int y);
q = min;
c = method(max,a,b);
printf("%d",c);
}

int method(int *p,int x,int y)
{
(*p)(x,y);
}

int max(int x,int y)
{
int z;
if(x>y)
{
z = x;
}
else
{
z = y;
}
return (z);
}

int min(int x,int y)
{
int z;
if(x>y)
{
z = y;
}
else
{
z = x;
}
return (z);
}

错在哪里,麻烦大家给指出来,或者是根本就没有这种用法啊???

[解决办法]
#include<stdio.h>
void main()
{
int max(int x,int y);
int min(int x,int y);
int method(int (*p)(int,int),int x,int y);
int (*p)(int x,int y);
int (*q)(int x,int y);
int a,b,c;
p=max;
q=min;
scanf("%d%d",&a,&b);
c = method(max,a,b);
printf("%d",c);
}

int method(int (*p)(int,int),int x,int y)
{
int z;
z=(*p)(x,y);
return (z);
}
int max(int x,int y)
{
int z;
if(x>y)
{
z = x;
}
else
{
z = y;
}
return (z);
}

int min(int x,int y)
{
int z;
if(x>y)
{
z = y;
}
else
{
z = x;
}
return (z);
}

这样改一下就行了。
[解决办法]
楼上的是正确的答案。
楼主的int method(int *p,int x,int y)中p只是一个int型的指针,而不是一个函数指针。
在方法中*p当然也就是个int型的值,所以那样调用就出问题了。
int method(int (*p)(int,int),int x,int y)中的p才是一个函数指针,它指向的函数有两个int型参数并且返回一个int类型的值。

也可以这样,先定义一个函数指针,如pfunc,指向有两个int型参数并且返回一个int类型的值的函数
typedef int (*pfunc)(int,int);
//然后直接用pfunc来作变量类型
int method(pfunc p,int x,int y)
{

}

读书人网 >C语言

热点推荐