2

考虑以下声明:

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."  

这样对吗?任何人都可以用英语简化并指定正确/准确的表示吗?提前致谢!

4

2 回答 2

5

应用螺旋规则,记住向右、向左、向右、向左等,在退出括号之前总是做括号中的任何事情:

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是一个函数,它带有一个指向带有 a 的函数的指针double和一个指向 a 的指针double(“双精度数组”,如果你想对其进行修饰)......

double(*foo(double (*)(double, double[]), double)) (double, ...)  
            ^^^^^^                        ^^^^^^

foo是一个接受 a 的函数(指向接受 a 的函数double的指针和指向double返回 a 的a 的指针double)和 a double...

double(*foo(double (*)(double, double[]), double)) (double, ...)  
       ^

foo是一个函数,它带有一个(指向一个带有 a 的函数double的指针和一个指向double返回 a 的a 的指针double)和一个double返回指向...的指针的 a

double(*foo(double (*)(double, double[]), double)) (double, ...) 
                                                   ^-----------^

foo是一个函数,它带有一个(指向一个带有 a 的函数double的指针和一个指向double返回 a 的a 的指针double)和一个double返回指向函数的指针的 a...

double(*foo(double (*)(double, double[]), double)) (double, ...) 
                                                    ^^^^^^^^^^^

foo是一个接受 a 的函数(指向接受 a 的函数double的指针和指向double返回 a 的a 的指针double)和 adouble返回指向接受 a 的函数的指针double和任何东西......

double(*foo(double (*)(double, double[]), double)) (double, ...) 
^^^^^^

foo是一个带有 a 的函数(指向带有 a 的函数double的指针和一个指向double返回 a 的a 的指针double)和 adouble返回指向带有 a 的函数的指针double以及任何返回 a的函数double

将整个东西插入cdecl给我这个(除了它不喜欢省略号参数):

将 foo 声明为函数(指向函数的指针(双精度,双精度数组)返回双精度,双精度)返回指向函数的指针(双精度,...)返回双精度

于 2013-10-19T00:45:11.440 回答
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)
于 2013-10-19T00:37:42.747 回答