C中的数组参数有什么区别

时间:2010-05-03 04:15:14

标签: c arrays return-value argument-passing

以下函数声明之间的区别是什么,它在C / C ++中创建并返回数组?两种方法都创建数组并用适当的值填充它,如果一切都通过则返回true。

bool getArray(int* array);
bool getArray(int* array[]);

由于

最诚挚的问候, 斯登

4 个答案:

答案 0 :(得分:3)

如果它可以帮助您思考它,您可以记住,int foo[]int *foo在同一级别上是相同的。因此,在您的示例中,第一个传递指向int的指针,而第二个传递指向指向int的指针。

答案 1 :(得分:1)

bool getArray(int *array);将指向int的指针作为参数(实际上是要填充的int数组)。 bool getArray(int *array[]);获取一个int指针数组。第一个是你想要的那个,虽然调用者需要分配一个足够大的输出数组,因此getArray()可以将数组元素复制到其中。

理解C指针/数组声明的一种方法是将它们视为说明如何访问基类型。 int *array表示如果你说*array,你就会得到一个int。 int *array[]表示如果你说*array[x],你就会得到一个int。 char (*array)[5][2][3]表示如果你说(*array)[0 thru 4][0 thru 1][0 thru 2],你就会得到一个字符。

答案 2 :(得分:1)

另外,您发布的代码是C ++。没有“C / C ++”这样的东西......是什么让你的原型可以被识别为C ++ - 一致的是使用数据类型“bool”来表示函数的返回类型。布尔变量未在C中定义。

答案 3 :(得分:0)

第二个需要一个指向数组的指针。因此,如果您的数组是int *getme;,那么您可以调用getArray(&getme);