编写这个指针函数代码的longform方法是什么?

时间:2016-01-25 07:18:31

标签: c++ function-pointers typedef

我是C ++的新手。仍然试图围绕回调如何在这种语言中运作。

我有点理解指针函数,但我不知道它是如何工作的。

#include <iostream>

int add(int x, int y){
    return x+y;
}

int subtract(int x, int y){
    return x-y;
}

typedef int(*t_yetAnotherFunc)(int,int);
t_yetAnotherFunc doMoreMath(char op){
    if(op == '+')
        return add; // equivalent of add(x,y), where x and y are passed from the function calling doMoreMath()?
    else if(op == '-')
        return subtract;
}

int main(){
    int x = 2;
    int y = 22;
    t_yetAnotherFunc yetAnotherFunc=    doMoreMath('+');
    int yetAnotherFuncOutput=           yetAnotherFunc(x,y);
    std::cout << yetAnotherFuncOutput << '\n';

    return 0;
}

xy如何从yetAnotherFuncOutput转到yetAnotherFunc

或者另一种询问方式:没有typedef会是什么样子?

2 个答案:

答案 0 :(得分:3)

指向函数的指针可以像任何其他函数一样使用,当你调用它时,你得到的结果就像调用任何其他函数一样。它就像是另一个函数的别名

在您的情况下,您创建add函数的别名,当您致电yetAnotherFunc时,您实际上正在调用add

声明

int yetAnotherFuncOutput=           yetAnotherFunc(x,y);

相当于

int yetAnotherFuncOutput=           add(x,y);

答案 1 :(得分:1)

让我们从typedef int(*t_yetAnotherFunc)(int,int)

开始

t_yetAnotherFunc是一种类型,可以指向一个方法,该方法将两个int作为结果并返回int

t_yetAnotherFunc doMoreMath(char op)方法会根据add返回subtractchar op。返回语句中的addsubtract必须被视为那些方法的地址而不是函数调用。

t_yetAnotherFunc yetAnotherFuncc = doMoreMath('+');

根据t_yetAnotherFunc的定义,现在yetAnotherFuncc可以指向add方法。

如果需要使用其指针(此处为add)调用具有参数(int x, int y)的函数(此处为yetAnotherFuncc),则需要通过其指针{{1}来提供其参数}}。这是通过以下线完成的。

yetAnotherFuncc(x, y)

它使用参数int yetAnotherFuncOutput = yetAnotherFunc(x,y); (2)和add(22)调用函数xy的返回值存储在{{1}中}}

如果没有add,它将是一个复杂的定义,如下所示

yetAnotherFuncOutput