考虑以下声明:
double(*foo(double (*)(double, double[]), double)) (double, ...)
- 用英语描述 foo 的类型。
这是一道作业题。我的分析是:
"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."
是吗?任何人都可以用英语简化和指定正确/准确的表示吗?提前致谢!
最佳答案
应用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
的指针(“array of double” if你想给它涂糖衣)......
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^ ^^^^^^
foo
是一个函数,它接受一个(指向一个接受 double
的函数的指针和一个指向返回 的
) 和一个 double
的指针doubledouble
...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^
foo
是一个函数,它接受一个(指向一个接受 double
的函数的指针和一个指向返回 的
) 和一个 double
的指针doubledouble
返回指向...的指针
double(*foo(double (*)(double, double[]), double)) (double, ...)
^-----------^
foo
是一个函数,它接受一个(指向一个接受 double
的函数的指针和一个指向返回 的
) 和一个返回函数指针的double
的指针doubledouble
...
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^^^^^^
foo
是一个函数,它接受一个(指向一个接受 double
的函数的指针和一个指向返回 的
) 和一个 double
的指针doubledouble
,它返回一个指向接受 double
和任何东西的函数的指针......
double(*foo(double (*)(double, double[]), double)) (double, ...)
^^^^^^
foo
是一个函数,它接受一个(指向一个接受 double
的函数的指针和一个指向返回 的
) 和一个 double
的指针doubledouble
,它返回一个指向接受 double
和任何返回 double
的函数的指针。
将整个内容插入 cdecl给我这个(除了它不喜欢省略号参数):
declare foo as function (pointer to function (double, array of double) returning double, double) returning pointer to function (double, ...) returning double
关于c++ - 这个复杂声明的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460946/