这个 C 语句是啥意思?

Posted

技术标签:

【中文标题】这个 C 语句是啥意思?【英文标题】:What does this C statement mean?这个 C 语句是什么意思? 【发布时间】:2012-01-05 04:12:51 【问题描述】:

我遇到了这条线:

void (*(*x)(void (*[10])(int *)))(int *)

谁能告诉我这是什么?

【问题讨论】:

这是测验还是什么? :) 这很容易回答:一团糟。 答案总是cdecl.org。 @mkb: "将 x 声明为指向函数的指针(指向函数的指针数组 10(指向 int 的指针)返回 void)返回指向函数的指针(指向 int 的指针)返回 void" i> - 好吧,这清除了它 请告诉我,您并没有在实际代码中发现它,实际上在某个地方使用了它......而是在某种可能的混淆竞赛的条目中:)? 【参考方案1】:

要自己分解,请从最里面的括号开始,然后解决问题。

    (*[10]) (*[10])(int *) int 的指针作为其参数 (void (*[10])(int *)) int 作为其参数并返回 void (*x)(void (*[10])(int *)) x 是一个指向函数的指针,该函数有一个参数(一个由 10 个指向函数的指针组成的数组,该函数有一个指向 int 的指针作为参数并返回 void)李>

.....

我在中途停了下来,但希望这会有所帮助。

【讨论】:

【参考方案2】:

cdecl 对这种事情很有帮助。它说:

将x声明为指向函数的指针(指向函数的数组10(指向int的指针)返回void)返回指向函数的指针(指向int的指针)返回void

【讨论】:

【参考方案3】:

你可以在这里找到解释:

How To Read Complicated C Declarations - does not compute Reading C type declarations C Declarations - Clockwise/Spiral Rule C-FAQ Question 1.21 - Complex Declarations

【讨论】:

@Shahbaz:这有什么好笑的? 我的意思是很有趣,因为我喜欢它,这就是你得到 +1 的原因 从未将声明视为螺旋形! @Shahbaz:直到我看到一篇关于它的文章(第三个链接)之前,我也没有想到。没那么复杂。是的,令人费解(双关语)且违反直觉。 @deathly809 然后修复它。【参考方案4】:

一个指向函数的指针,它有一个由 10 个函数指针组成的数组 具有 int * 参数和返回类型 void 作为参数,并返回 指向具有 int * 参数且返回类型为 void 的函数的指针。

Source

【讨论】:

最终的问题是,如果你没有这个,你将如何解决这个问题? @TonyTheLion,没有问题,为什么有人会写这样的东西而不把它分成小块?

以上是关于这个 C 语句是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

这个语句在c++中是啥意思?

“?”是啥意思?和“:”在布尔语句中做啥? [复制]

istringstream sin(s); 这个语句是啥意思

c语言switch语句中default是啥意思?

c语言。 if(num&0x01),这个if语句里面判断的是啥?

请问下C语言中的,continue是啥的意思的呢?