Both
int getResult(Foo** fooPtrArray)
and
int getResult(Foo* fooPtrArray[])
也
int getResult(Foo* fooPtrArray[4])
会工作得很好(它们都是等价的)。
从你的问题中并不清楚问题是什么。什么“失败”?
当传递这样的数组时,传递元素计数通常也是有意义的,因为允许数组类型衰减为指针类型的技巧通常专门用于允许传递不同大小的数组:
int getResult(Foo* fooPtrArray[], unsigned n);
...
Foo* array3[3];
Foo* array5[5];
getResult(array3, 3);
getResult(array5, 5);
但是,如果您总是要传递严格包含 4 个元素的数组,那么使用不同类型的指针作为参数可能是一个更好的主意:
int getResult(Foo* (*fooPtrArray)[4])
在后一种情况下,函数调用将如下所示
Foo* array[4];
getResult(&array);
(注意&
应用于数组对象的运算符)。
最后,由于这个问题被标记为 C++,在后一种情况下,也可以使用引用代替指针
int getResult(Foo* (&fooPtrArray)[4]);
...
Foo* array[4];
getResult(array);