了解以下C++函数定义

ELD*_*ELD 2 c++

double randNormal(double (*fun)(double, double, double), double xmin, double xmax, double sigma, double mju)
{
static double (*Fun)(double, double, double) = NULL, YMin, YMax;
static bool First = true;

if (First)
{
    First = false;
    srand((unsigned) time(NULL));
}

if (fun != Fun)
{
  Fun = fun;
  YMin = 0, YMax = Fun(xmin, sigma, mju); 


for (int iX = 1; iX < 10000; iX++)
  {
    double X = xmin + (xmax - xmin) * iX / 10000;
    double Y = Fun(X, sigma, mju);
    YMax = Y > YMax ? Y : YMax;
  }
}

double X = xmin + (xmax - xmin) * rand() / RAND_MAX;
double Y = YMin + (YMax - YMin) * rand() / RAND_MAX;

return Y < fun(X, sigma, mju) ? X : randomNormal(Fun, xmin, xmax, sigma, mju);
Run Code Online (Sandbox Code Playgroud)

}

我是C++的新手,我正在努力理解上面的代码.(*fun)(double, double, double)我们定义函数时的作用是什么randNormal?此外,第二行开始的是static double什么?非常感谢你的帮助!

Ane*_*dar 5

这是一个函数指针.在这种情况下,函数返回一个double并将3个双精度作为参数.Fun以相同的方式声明并稍后调用,使用3个双精度作为参数)

static double行声明了一个函数指针Fun,就像有趣和两个double值一样.static这意味着值将被保留,并且在下次调用该函数时仍然可用.

编辑:要阅读有关函数指针的更多信息,请参阅此处:C中的函数指针如何工作?