C语言中用函数做函数的形式参数的问题

 我来答
仝飞雨SN
2019-05-27 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:31%
帮助的人:887万
展开全部
给你举个例子吧,这样就容易理解得多。
例子:设计一个函数func();在调用它时每次实现不同的函数功能,输入两个参数a和b,第一次调用func()时找出a和b中的较大者,第二次调用找出较小者,第三次调用求a和b之和。
说明:格式
(*p)()
表示定义一个指向函数的指针变量p,在c语言中这个格式是固定的,前面的()表示p先和*结合,是指针变量,后面的()表示p指向一个函数。前面的()不能省略,如果写成
*p(),由于()优先级比*高,那就表示p()函数返回的是一个指针,p本身就是函数不是指针了,意思完全变了。
任何一个函数,函数名就是该函数的入口地址(起始地址),也就是说函数名就是个地址,从这个地址开始,函数占用一段内存单元。因此可以用一个指针变量来指向这个这个函数名,这样就相当于指向这个函数了。所以下面的max,min,add函数都是一个地址,分别调用时就是赋值p=max,p=min,p=add,也就是(*p)(x,y)分别就等于max(x,y),min(x,y),add(x,y).
程序在win-tc和Dev-c++下调试通过。
#include
<stdio.h>
#include
<conio.h>
int
max(int
x,int
y)
{
return(x>y?x:y);
}
int
min(int
x,int
y)
{
return(x<y?x:y);
}
int
add(int
x,int
y)
{
return(x+y);
}
int
func(int
x,int
y,int
(*p)())
/*定义指向函数的指针变量p,关键1*/
{int
result;
result=(*p)(x,y);
/*调用相应函数,函数名即地址给p,这样p指向该函数,关键2*/
printf("%d\n",result);
}
main()
{
int
a,b;
printf("Please
input
two
integers
a
and
b:\n");
scanf("%d%d",&a,&b);
printf("max=");
func(a,b,max);/*相当于赋值p=max*/
printf("min=");
func(a,b,min);/*相当于赋值p=min*/
printf("add=");
func(a,b,add);/*相当于赋值p=add*/
getch();
}
瑞博实凌玄
2019-11-23 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:35%
帮助的人:725万
展开全部
可以使用函数指针,比如:
void
function(int
x,void
(*visit)())/*没有返回值,没有参数*/
{
/*其他代码*/
visit();
}
void
function(int
x,void
(*visit)(int))/*没有返回值,有整形参数*/
{
int
y
=
x*x;
/*其他代码*/
visit(y);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
寒寄文欧成
2019-09-18 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:32%
帮助的人:635万
展开全部
用函数指针应该能解决吧,以下是我写的一个例子,TC编译通过:
int
test1(int
i)
{
return
i;
}
int
test2(int
a,int
(*fp)(int
a))
{
return
fp(a);
}
main()
{
printf("%d",test2(5,test1));
getch();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式