【问题标题】:Pointer to array of functions in C指向 C 中函数数组的指针
【发布时间】:2014-05-13 09:58:20
【问题描述】:

我有这种定义

int (*af[10])(int , *a[10][10])(int,int)

我不得不“翻译”它,就像“这是指向 10 的函数数组大小的指针”等等。我认为这里有一个错误,因为 *a[10][10] 没有定义类型。它是否正确?或者这行能不能翻译正确?

提前致谢


最后发现正确的定义应该是这样的

int (*af[10])(int ,int (*a[10][10])(int,int))

这是正确且有意义的。

【问题讨论】:

  • 这是一个语法错误,因为?缺少第二个数组的定义类型或?
  • 看起来像一个指向返回函数指针的函数的指针。读起来像“如果我取 af,给它一个从 0 到 9 的索引,取消引用它,然后用两个参数调用结果,其中一个是 int,另一个可能拼写错误,然后用两个 int 参数调用结果,然后我得到一个 int"。
  • @yakamuki a的类型不完整。
  • 对于类似的问题,查看cdecl.org 可能会有所帮助。
  • @glglgl cdecl.org 认为函数可以返回一个函数。例如,它会将int (*af[10])(int *[10][10])(int,int); 报告为类型正确。这是误导。在这种情况下,正确的编译器更加可靠。

标签: c arrays function pointers definition


【解决方案1】:

这不是一个有效的 C 声明。首先,缺少a 的类型。但更糟糕的是,好像(*af[10])(int , *a[10][10]) 正在返回一个函数(这是不可能的)。

也许你的意思是:

int (*(*af[10])(int , int *a[10][10]))(int,int)

这将使af成为一个包含10个指向函数接收int的指针的数组和一个包含10个指向int的指针的数组,并返回一个指向函数的指针,该函数接收两个ints并返回一个@ 987654329@.

编辑:

看起来正确的行是:

int (*af[10])(int ,int (*a[10][10])(int,int))

这使得af 成为一个包含 10 个指针的数组,指向接收 2 个参数并返回 int 的函数。第一个参数是int,第二个参数是一个多维数组(10x10)或指向函数的指针,接收2个ints并返回一个int

以后,您可能想查看cdecl.org 以确认您的猜测。

【讨论】:

  • 是的,这就是我的想法,但是当我对这些进行更正时,我得到了否定的答案,因为这是正确的语法(根据他们)。
  • @yakamuki 谁说的?
  • 我被要求为一门课程翻译这一行,这就是为什么我在这里如此困惑..
  • @yakamuki 如果真的像你展示的那样,那就错了。那是无效的 C。把它塞进一个源文件——它不会编译。
  • 好笑的是我给教授更正了,他终于接受了,但他一直要求翻译错误的行..
【解决方案2】:

我认为af实际上是一个数组:

af[10]

数组包含指针:

*af[10]

这些是指向函数的指针:

int (*af[10])(...)

而且参数列表有语法错误,可能是int后面的逗号错了:

int (*af[10])(int *a[10][10])

剩下的都是垃圾。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-25
    相关资源
    最近更新 更多