函数返回的函数指针

时间:2015-02-02 21:35:15

标签: function pointers c++11

我试图学习C ++中的指针,但似乎它变得更加复杂......

在主循环中

int i;
for (i = 0; i < 5; ++i){
    if (fun == arrfun[i]) break;
}

如果fun和arrfun开始循环形式0,那么如何在fun2上= = arrfun [i]?因此它们应该等于log(x)。我怎么能循环到罪恶或cos等?

#include <iostream>
#include <cmath>

using namespace std;

typedef double(*FUNDtoD)(double);
typedef FUNDtoD ARRFUN[];

FUNDtoD funmax(ARRFUN, double);

double fun0(double x) { return log(x); }
double fun1(double x) { return x*x;    }
double fun2(double x) { return exp(x); }
double fun3(double x) { return sin(x); }
double fun4(double x) { return cos(x); }

int main() {

    ARRFUN arrfun = { fun0, fun1, fun2, fun3, fun4 };

    FUNDtoD fun = funmax(arrfun, 1);

    int i;
    for (i = 0; i < 5; ++i){
        if (fun == arrfun[i]) break;
    }

    cout.precision(14);
    cout << "Largest value at x=1 assumed by function # "
        << i << ".\nThe value is " << fun(2) << endl;

    return 0;
}

FUNDtoD funmax(ARRFUN f, double x){
    double m = f[0](x), z;
    int k = 0;

    for (int i = 1; i < 5; i++){
        if ((z = f[i](x)) > m) {
            m = z;
            k = i;

        }
    }
    return f[k];
}

我不明白函数FUNDtoD funmax如何在底部工作,请有人澄清一下,非常感谢。

1 个答案:

答案 0 :(得分:0)

  

如果fun和arrfun开始循环形式0,那么如何在fun2上= = arrfun [i]? &GT;因此它们应该等于log(x)。我怎么能循环到罪恶或cos等?

fun没有循环,针对存储在数组中的每个函数指针(arrfun)检查相同的指针。它只是试图找到返回的函数指针的索引。如果sin(x)给出最高值,则该循环将以i中的4结束。

  

不了解FUNDtoD funmax功能如何在底层工作,可以   有人澄清一下,非常感谢。

分解如下:

首先执行m = f0;

f [0] - &gt; fun0所以结果是m = log(x);

接下来,它将逐步执行其他4个函数,并测试x上的操作是否导致比前一个更高的值。然后它存储返回最高值的函数的索引。

最后它返回该函数指针。