【问题标题】: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> - 好吧,这清除了它
  • 请告诉我,您并没有在实际代码中发现它,实际上在某个地方使用了它......而是在某种可能的混淆竞赛的条目中:)?

标签: c pointers


【解决方案1】:

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

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

.....

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      【讨论】:

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

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

      Source

      【讨论】:

      • 最终的问题是,如果你没有这个,你将如何解决这个问题?
      • @TonyTheLion,没有问题,为什么有人会写这样的东西而不把它分成小块?
      猜你喜欢
      • 2022-01-12
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2014-03-30
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      相关资源
      最近更新 更多