我试图学习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
如何在底部工作,请有人澄清一下,非常感谢。
答案 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上的操作是否导致比前一个更高的值。然后它存储返回最高值的函数的索引。
最后它返回该函数指针。