如果我可以传入已知大小的数组:
void fn(int(*intArray)[4])
{
(*intArray)[0] = 7;
}
为什么我不能归还一个:
int intArray[4] = {0};
int(*)[4] fn()
{
return &intArray;
}
这里,“(*)”中的“)”生成“语法错误:)”。
答案 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**