这个C语句有什么作用?

时间:2010-11-23 03:05:10

标签: c arrays pointers

伙计们,我的教授给我们分配了一个涉及用数组,指针和函数打字的作业。现在,在你用“我们不打算为你做功课”的事情跳起来之前,我的问题的答案并不能解决问题。事实上,我已经对答案做了最好的猜测。我很想知道你对此的看法。

这是我给出的C语句:

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

我们的问题涉及描述foo的类型。我的问题很简单:这个陈述到底是做什么的?据我所知,这是我见过的最混乱和不切实际的代码行之一,或者它实际上并不是有效的C.让我知道你的想法。

3 个答案:

答案 0 :(得分:10)

您想要学习的是Clockwise Spiral Rule。学习这个将帮助您用简单的词语描述C中的任何类型。好好学习。

答案 1 :(得分:0)

这会有所帮助

typedef RETURNTYPE (* POINTER_TO_FUNCTION_TYPE)(ARGTYPE1, ARGTYPE2)

C支持一个指向函数的指针类型,你可以用这种方式键入def,以便根据它来简化更长的表达式。

所以,使用这个typedef,我可以声明这个函数

POINTER_TO_FUNCTION_TYPE f(POINTER_TO_FUNCTION_TYPE g);

这是一个函数,它接受一个指向函数的指针并返回一个指向函数的指针。没有typedef,想象一下这个声明的样子。

答案 2 :(得分:0)

根据我的编译器(Visual Studio 2010)该语句绝对没有任何内容。它成功编译,但没有为它生成汇编指令,因此调试器会直接执行它。至于为什么它没有做任何事情以及它真正意味着什么 - 需要有比我更多的C知识的人来解释它。

我可以使用顺时针/螺旋规则计算出foo的类型 - 谢谢, jer !如果你重新格式化它会更容易:

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