如何解决函数指针的此错误?

时间:2019-08-06 09:58:07

标签: c++

在程序中,将指针声明为函数(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

2 个答案:

答案 0 :(得分:3)

(*functocall)(b,c)并没有达到您的期望,您正在尝试调用functocall。 (请注意,functocall被声明为一个函数,它需要两个int,并返回一个int*。)

您应该将函数指针本身传递给caller,例如

a = caller(b, c, p);

a = caller(b, c, &add);

LIVE

答案 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;
}