C语言 将函数名作为参数被另外一个函数调用
函数f1()中用函数f2作为参数,然后在f()中用形参函数f2调用实参函数。形式如voidf1(intf2){f2;}intadd(){}intsub(){}intmai...
函数 f1()中用函数f2作为参数,然后在f()中用形参函数f2调用实参函数。形式如
void f1(int f2)
{ f2;
}
int add(){}
int sub(){}
int main()
{
f1(add); //实际执行的是add函数
f1(sub); //实际执行的是sub函数
}
如何才能实行,可以用简单的几个函数给出说明,谢谢!高分重谢! 展开
void f1(int f2)
{ f2;
}
int add(){}
int sub(){}
int main()
{
f1(add); //实际执行的是add函数
f1(sub); //实际执行的是sub函数
}
如何才能实行,可以用简单的几个函数给出说明,谢谢!高分重谢! 展开
8个回答
展开全部
要将函数名作为参数,需要使用函数指针。
函数指针的定义格式为
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为参数,调用该指针指向的函数。
展开全部
楼主已经开始想要知道如何用函数指针了,不错,好学生,给你个例子
#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
#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
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你看个程序代码吧,功能是输入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;
}
我编译器是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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
函数名其实是函数指针,能用指针的地方就能用函数指针。
这里f1的原型应该是这样的才对
void f1(int (*f2)())//f2 是一个函数指针
{
f2();
}
这里f1的原型应该是这样的才对
void f1(int (*f2)())//f2 是一个函数指针
{
f2();
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用函数指针的方式实现
#include <stdio.h>
typedef void (*printFun)(void);
void printOK(void)
{
printf("OK\n");
}
void testfun(printFun Fun)
{
Fun();
}
int main()
{
testfun(printOK);
return 0;
}
#include <stdio.h>
typedef void (*printFun)(void);
void printOK(void)
{
printf("OK\n");
}
void testfun(printFun Fun)
{
Fun();
}
int main()
{
testfun(printOK);
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询