这个 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 语句是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
istringstream sin(s); 这个语句是啥意思