以下函数声明在 C/C++ 中创建和返回数组有什么区别?两种方法都创建数组并用适当的值填充它,如果一切都通过,则返回 true。
bool getArray(int* array);
bool getArray(int* array[]);
谢谢
最好的问候, STeN
以下函数声明在 C/C++ 中创建和返回数组有什么区别?两种方法都创建数组并用适当的值填充它,如果一切都通过,则返回 true。
bool getArray(int* array);
bool getArray(int* array[]);
谢谢
最好的问候, STeN
如果它可以帮助您思考它,您可以记住这与在一个级别上int foo[]
是同一回事。int *foo
因此,在您的示例中,第一个传递了一个指向 int 的指针,而第二个传递了一个指向 int 的指针的指针。
附带说明一下,您发布的代码是 C++。没有“C/C++”之类的东西……使您的原型可识别为符合 C++ 标准的原因是函数的返回类型使用了数据类型“bool”。布尔变量未在 C 中定义。
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]
,你会得到一个字符。
第二个需要一个指向数组的指针。所以如果你是数组,int *getme;
那么你调用getArray(&getme);