2010-06-09 59 views
5

如果我可以已知大小的数组传递:在C++中返回一个已知大小的数组?

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

为什么不能返回一个:

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

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

+0

你正在传递一个指向已知大小数组的指针。在C++中,引用可能会更好,因为它将像数组一样行为,而不必对其进行解引用。 – 2010-06-09 12:16:36

回答

4

[4]进入函数名后,就好像它会在变量名后的变量定义:

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

因为这是很晦涩的语法,容易被如果没有任何特别的理由说明它必须是数组指针,那么我会建议将数组作为简单的int*返回。

你也可以用一个typedef简化函数定义:

typedef int intarray_t[4]; 

intarray_t* fn() { ... } 
+0

嗯,这不适用于任何在线编译器 – Will 2010-06-09 12:11:47

+0

@Will:它可以与gcc v3.4.3和v4.4.1以及Sun cc v5.9一起使用,所以我会说这是与这些问题有关的问题在线编译器。 – sth 2010-06-09 12:17:53

+0

您可以使用typedef来缓解语法问题。但是真的,你最好返回int **,甚至int *。 – Arkadiy 2010-06-09 12:20:35

1

您可以返回int**

+0

或者void *。两者都有关于数组大小的信息。 – 2010-06-09 12:14:25

2

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

例如,下面的代码:

int fn()[4] { 
    ... 

没有得到通过各种在线编译器接受;我试了一下在科莫在线编译器,它被认为是编译器的最标准以下情况之一,甚至在轻松模式,它说:

error: function returning array is not allowed

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

相关问题