函数内部的函数,不带括号

Function inside a function without parentheses?

本文关键字:函数 内部      更新时间:2023-10-16

有这样的C代码:

*(*(A+i)+j) = aaa(*bbb,0,PI)/(16*PI);

aaa是一个函数,BBB是另一个函数:

double bbb(double x, double y)
{
    int i,j,k,l,m,n;
    *(K+1)=sin(x)*cos(y);
    *(K+2)=sin(x)*sin(y);
    *(K+3)=cos(x);
...
...

我的问题是,当bbb在函数aaa中被调用时,bbb后面没有任何括号,也就是说,没有变量传递到函数bbb中。那么函数bbb中x和y的值是多少?两个零?

好了,这是一个很长的代码的一部分:

*(*(A+i)+j) = aaa(*bbb,0,PI)/(16*PI);

aaa及相关功能:

double aaa(double (*func)(double, double), double x1, double x2)
{
    double qgaus(double (*func)(double), double a, double b);
    double f1(double x);
    nrfunc=func;
    return qgaus(f1,x1,x2);
}
double f1(double x)
{
    double qgaus(double (*func)(double), double a, double b);
    double f2(double y);
    double yy1(double),yy2(double);
    xsav=x;
    return qgaus(f2,yy1(x),yy2(x));
}
double f2(double y)
{
    return (*nrfunc)(xsav,y);

函数bbb中的大写变量K是main()中定义的全局变量。

我只是想知道传递给函数bbb的x和y值是多少

很可能(假设代码可以编译)aaa是一个函数,它的第一个参数是指向函数的指针。如果解引用指向函数的指针,调用仍然有效。因此,在您的情况下,*b只是衰减到一个函数指针,这可能是在aaa(其中的定义,你不提供)内使用。简单的例子:

#include <iostream>
void f(int x)
{
    std::cout << "void f(int) invoked, with x = " << x << std::endl;
}
void a(void (*fptr)(int), int x)
{
    fptr(x); // call the function pointed by fptr with argument x
}
int main() 
{
    a(f, 10);
    a(*f, 20); // same as above
    a(****f, 42); // still the same
}

所以在你的代码中,你首先传递给函数的指针,然后是函数的参数,然后在通过指向函数的指针调用函数时使用。