考虑以下声明:
double(*foo(double (*)(double, double[]), double)) (double, ...)
这是一个家庭作业问题。我的分析是:
"foo is a function pointer to a function that has as it's first argument,
another function pointer to a function that returns a double and takes a
double and an array of doubles."
是不是?任何人都可以用英语简化并指定正确/准确的表示吗?提前谢谢!
答案 0 :(得分:5)
应用spiral rule,记住要去正确,左,右,左等,在退出之前总是做括号中的任何内容:
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^
foo
是......
double(*foo(double (*)(double, double[]), double)) (double, ...)
^------------------------------------^
foo
是一个函数......
double(*foo(double (*)(double, double[]), double)) (double, ...)
^
foo
是一个指向...的指针的函数。
double(*foo(double (*)(double, double[]), double)) (double, ...)
^----------------^
foo
是一个带函数指针的函数......
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^^^^^^^^^^^
foo
是一个函数,它指向一个带double
的函数的指针和一个指向double
的指针(如果你想对它进行糖衣,则为“双数组”)。 ..
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^ ^^^^^^
foo
是一个函数,它带有(指向函数的指针double
和指向double
的指针,返回double
)和{{1} } ...
double
double(*foo(double (*)(double, double[]), double)) (double, ...)
^
是一个函数,它带有(指向函数的指针foo
和指向double
的指针,返回double
)和{{1}返回指向...的指针
double
double
是一个函数,它带有(指向函数的指针double(*foo(double (*)(double, double[]), double)) (double, ...)
^-----------^
和指向foo
的指针,返回double
)和{{1}返回指向函数的指针...
double
double
是一个函数,它带有(指向函数的指针double
和指向double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^^^^^^
的指针,返回foo
)和{{1}返回一个指向函数的指针,该函数采用double
和任何...
double
double
是一个函数,它带有(指向函数的指针double
和指向double
的指针,返回double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^
)和{{1}返回指向函数的指针,该函数采用foo
以及返回double
的任何内容。
将整个事物插入cdecl给了我这个(除了它不喜欢省略号参数):
声明foo为函数(指向函数的指针(double,double of array)返回double,double)返回指向函数的指针(double,...)返回double
答案 1 :(得分:1)
请这样看:
double(*foo(double (*)(double, double[]), double)) (double, ...);
== double(*foo(FUNC_PTR, double)) (double, ...)
where FUNC_PTR is of the form => double(*)(double first_arg, double[] second_arg)