在C ++中返回已知大小的数组?

时间:2010-06-09 11:55:40

标签: c++ arrays return

如果我可以传入已知大小的数组:

void fn(int(*intArray)[4])
{
    (*intArray)[0] = 7;
}

为什么我不能归还一个:

int intArray[4] = {0};
int(*)[4] fn()
{
    return &intArray;
}

这里,“(*)”中的“)”生成“语法错误:)”。

3 个答案:

答案 0 :(得分:4)

[4]位于函数名之后,就像它在变量定义中的变量名之后:

int (*fn())[4]
{
    return &intArray;
}

由于这是一个非常模糊的语法,容易让所有读取它的人感到困惑,我建议将数组作为一个简单的int*返回,如果你没有任何特殊原因,为什么它必须是指向数组的指针。

您还可以使用typedef简化函数定义:

typedef int intarray_t[4];

intarray_t* fn() { ... }

答案 1 :(得分:2)

Its not allowed to return arrays from functions, but there are workarounds

例如,以下代码:

int fn()[4] {
   ...

不被各种在线编译器接受;我在Comeau在线编译器上尝试了它,它被认为是最标准的编译器之一,甚至在放松模式下它说:

  

error: function returning array is not allowed

另一张海报建议归还int**;这将起作用,但要小心你返回堆分配的内存而不是堆栈分配。

答案 2 :(得分:1)

您可以返回int**