C语言 将函数名作为参数被另外一个函数调用

如题所述

要将函数名作为参数,需要使用函数指针。
函数指针的定义格式为
ret_type
(*var_name)(arg_list);
表示返回值为ret_type,参数列表为arg_list的函数指针var_name.

int
(*p)(int,int);
表示返回值为int,参数为两个int型的函数指针p。
以函数指针作为形参,即可实现函数名作为参数,由另一个函数调用。

void func(int (*a)(int))
{
int r = 100l;
(*a)(r);
}即可传入函数指针,并以r为参数,调用该指针指向的函数。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-07-14
楼主已经开始想要知道如何用函数指针了,不错,好学生,给你个例子
#include
<stdio.h>
int
ff(int(*p)(int,int),int
a,int
b)//原始写法,阅读不便
{
return
p(a,b);
}
typedef
int(*Pfun)(int,int);//定义函数指针类型,同时申明了原型
返回int
两个int形参
int
f(Pfun
p,int
a,int
b)
//改进写法
易懂
{
return
p(a,b);
}
int
add(int
a,int
b)
{
printf("加法函数add被调用:");
return
a+b;
}
int
sub(int
a,int
b)
{
printf("减法函数sub被调用:");
return
a-b;
}
void
main()
{//函数指针初步应用
int
a=1,b=2;
printf("
%d+%d=%d\n",a,b,f(add,a,b));
printf("
%d-%d=%d\n",a,b,f(sub,a,b));
printf("
%d+%d=%d\n",a,b,ff(add,a,b));
printf("
%d-%d=%d\n",a,b,ff(sub,a,b));
}
///////////运行结果:
加法函数add被调用:
1+2=3
减法函数sub被调用:
1-2=-1
加法函数add被调用:
1+2=3
减法函数sub被调用:
1-2=-1
第2个回答  2019-07-17
给你看个程序代码吧,功能是输入a、b,然后分别输出a+b,a-b,找我代码改就行~
我编译器是gcc,你要是vc6,稍微改下就ok~
#include
<stdio.h>
typedef
int
(*FUNC)(int
a,
int
b);
int
add(int
x,
int
y)
{
return
x
+
y;
}
int
sub(int
x,
int
y)
{
return
x
-
y;
}
int
f(int
x,
int
y,
FUNC
op)
{
return
op(x,
y);
}
int
main()
{
int
a,
b;
scanf("%d%d",
&a,
&b);
printf("%d\n",
f(a,
b,
add));
printf("%d\n",
f(a,
b,
sub));
return
0;
}
第3个回答  2020-02-26
函数名其实是函数指针,能用指针的地方就能用函数指针。
这里f1的原型应该是这样的才对
void
f1(int
(*f2)())//f2
是一个函数指针
{
f2();
}
第4个回答  2019-07-19
用函数指针的方式实现
#include
typedef
void
(*printfun)(void);
void
printok(void)
{
printf("ok\n");
}
void
testfun(printfun
fun)
{
fun();
}
int
main()
{
testfun(printok);
return
0;
}