有这个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);
...
...
我的问题是,当在函数aaa中调用bbb时,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值是什么。
答案 0 :(得分:2)
最有可能(假设代码编译)aaa
是一个函数,它将第一个参数作为指向函数的指针。如果取消引用指向函数的指针the call is still valid,则无关紧要。所以在你的情况下,*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
}
所以在你的代码中,你首先将指针传递给function,然后传递函数的参数,然后在通过函数指针调用后者时使用它们。