int ** foo [] []()中的foo是什么

时间:2014-11-27 19:55:19

标签: c arrays pointers declaration

我目前正在为我的C-Midterm学习,我遇到了这个声明:

int **foo[][]()    

在寻找解决方案时,这个宣言意味着我的导师实际上给出了两个不同的答案: 1)foo是一个函数数组数组,返回类型指向指向int的指针 2)foo是指向返回类型为int的函数的指针的数组数组 我知道"从变量的名称开始,继续向右,直到你到达终点或“#39;”'然后回到你的最后一个起点继续向左,直到你到达开始或者#(''''规则,所以我认为1)是正确的答案,但我不完全确定。

谢谢, Ozelotl

2 个答案:

答案 0 :(得分:1)

这没什么特别的。这意味着它表面看起来像一个C声明,但它没有格式良好。这是非法的,因此没有任何意义。

首先,它看起来像一个二维数组声明,但在C语言中,需要一个数组声明来指定除第一个之外的所有大小。您的声明也省略了第二个尺寸,这使其成为非法。

其次,即使我们忽略了缺少的大小,它看起来像是一个函数数组的声明。在C中声明函数数组是违法的。

例如,这将产生合法的C声明

int (**foo[][42])()

但不是你原来的。

答案 1 :(得分:0)

这个声明的语法是foo[][]声明一个二维数组(或者,如果第二个绑定指定了一个维度,它就会这样 - 因为它是非法的);然后剩下的就是:

int **bar();    // with bar = foo[][]

这是一个接受未指定参数并返回int **的函数。但是,由于bar是一种数组类型,因此尝试声明一组函数,这是非法的。 (不要与函数指针数组混淆,这样就可以了。)

语法规则是**绑定到int(而不是bar)除非您使用括号强制它们绑定到bar;所以他们是int **类型的一部分,他们并不是说bar是一个指针。