如果我可以已知大小的数组传递:在C++中返回一个已知大小的数组?
void fn(int(*intArray)[4])
{
(*intArray)[0] = 7;
}
为什么不能返回一个:
int intArray[4] = {0};
int(*)[4] fn()
{
return &intArray;
}
在此, “)” 中的 “(*)” 生成“语法错误:)“。
如果我可以已知大小的数组传递:在C++中返回一个已知大小的数组?
void fn(int(*intArray)[4])
{
(*intArray)[0] = 7;
}
为什么不能返回一个:
int intArray[4] = {0};
int(*)[4] fn()
{
return &intArray;
}
在此, “)” 中的 “(*)” 生成“语法错误:)“。
的[4]
进入函数名后,就好像它会在变量名后的变量定义:
int (*fn())[4]
{
return &intArray;
}
因为这是很晦涩的语法,容易被如果没有任何特别的理由说明它必须是数组指针,那么我会建议将数组作为简单的int*
返回。
你也可以用一个typedef简化函数定义:
typedef int intarray_t[4];
intarray_t* fn() { ... }
您可以返回int**
或者void *。两者都有关于数组大小的信息。 – 2010-06-09 12:14:25
Its not allowed to return arrays from functions, but there are workarounds。
例如,下面的代码:
int fn()[4] {
...
没有得到通过各种在线编译器接受;我试了一下在科莫在线编译器,它被认为是编译器的最标准以下情况之一,甚至在轻松模式,它说:
error: function returning array is not allowed
另一个海报建议返回int**
;这会起作用,但要非常小心,你返回堆分配的内存,而不是堆栈分配。
你正在传递一个指向已知大小数组的指针。在C++中,引用可能会更好,因为它将像数组一样行为,而不必对其进行解引用。 – 2010-06-09 12:16:36