如果我可以传递一个已知大小的数组:
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 (&a)[4] = fn2(); for (int i = 0; i < (sizeof(a) / sizeof((a)[0])); ++i) a[i] = 8;
- Pete Kirkham例如,以下代码:
int fn()[4] {
...
这段代码在各种在线编译器上都无法通过;我在被认为是最符合标准的编译器之一的Comeau在线编译器上尝试了一下,即使在放松模式下也会显示:
error: function returning array is not allowed
另一位发帖者建议返回int**
;这样做是可行的,但要非常小心,确保返回的是堆分配的内存而不是栈分配的内存。
你可以返回 int**