在程序中,将指针声明为函数(p),该指针已初始化为函数(add)
我试图阅读所有与函数指针有关的概念。 但是我解决不了 请帮助我解决此程序,而不会出现任何错误。
#include <stdio.h>
#include <iostream>
using namespace std;
int add(int n1, int n2)
{
return n1 + n2;
}
int *functocall(int,int);
int caller(int n1, int n2, int(*functocall)(int, int))
{
return (*functocall)(n1, n2);
}
int main()
{
int a, b, c;
cin >> b >> c;
int (*p)(int,int)=&add;
a=caller(b,c,(*functocall)(b,c));
printf("%d",a);
return 0;
}
如果输入为20 70 输出必须为90
答案 0 :(得分:3)
(*functocall)(b,c)
并没有达到您的期望,您正在尝试调用functocall
。 (请注意,functocall
被声明为一个函数,它需要两个int
,并返回一个int*
。)
您应该将函数指针本身传递给caller
,例如
a = caller(b, c, p);
或
a = caller(b, c, &add);
答案 1 :(得分:1)
方法太复杂了。通常,当您不了解某些内容时,会使其变得更加复杂,然后就必须变得如此
#include <stdio.h>
#include <iostream>
using namespace std;
int add(int n1, int n2)
{
return n1 + n2;
}
int caller(int n1, int n2, int(*functocall)(int, int))
{
return (*functocall)(n1, n2);
}
int main()
{
int a, b, c;
cin >> b >> c;
a = caller(b,c,add);
printf("%d",a);
return 0;
}
不太确定您是否真的需要caller
。也许您添加的时间比尝试使其运行时的时间多,但也许没有。甚至更简单的替代方法是
#include <stdio.h>
#include <iostream>
using namespace std;
int add(int n1, int n2)
{
return n1 + n2;
}
int main()
{
int a, b, c;
cin >> b >> c;
int (*functocall)(int, int) = add;
a = functocall(b,c);
printf("%d",a);
return 0;
}