2011-05-12 145 views
1

我似乎无法理解为什么这不起作用。返回数组C++

全局变量:

int genericSet[] = {1,2,3,4}; 

int main()... 

int* function() { 
    return &genericSet; 
} 

它为什么给我一个错误,而试图返回这个数组?是因为它是一个全局变量,如果有的话,为什么这么重要?我通常会如何返回一个静态声明的数组?我意识到这是额外的工作返回一个全局变量,但它实际上是否阻止了这一点?我只是用它作为占位符,并一直出现错误。

+0

它可能有助于阅读http://stackoverflow.com/questions/4810664/how-do-i-use-arrays-in-c有关数组和指针之间的区别。 – Cubbi 2011-05-12 03:00:39

回答

6

您的函数类型与返回类型不匹配。你的函数是int *,但是你返回的是int **类型。

+0

现货。需要'返回genericSet'而不是'return&genericSet'。 – tylerl 2011-05-12 02:44:40

+0

谢谢,但有一个问题,当我尝试返回地址为&genericSet并将返回值设置为int(-asterisk在这里不会显示)[4] funciton ...应该这个工作返回的地址该数组,因为它不会让我使用int * - 另一个星号在这里不会显示任何 - 作为&genericSet的返回值: -/ – rubixibuc 2011-05-12 02:57:37

+2

@rubixibuc将是'int(* function())[4] {return&genericSet; }' – Cubbi 2011-05-12 03:05:44

2

您返回一个变量的地址,该变量是一个数组。

它可以被看作是返回指针的指针。 你不需要&,只需返回数组。

因此,要么:

int ** function() 
{ 
    return (int **)&genericSet; 
} 

或:

int * function() 
{ 
    return genericSet; 
} 
+0

它不会让我用int * -asterisk在这里不会显示 - 返回&genericSet,它给我一个错误,它说它必须是int(* - 星号在这里不会显示)[4]但这不工作吗? – rubixibuc 2011-05-12 03:02:02

+0

您可以放心地将它转换为(INT *),所以你的代码:'回报(INT *)genericSet;' – Macmade 2011-05-12 03:07:16

+0

应该是:'INT(*)()的函数[4] { 回报&genericSet; }' – 2011-05-12 04:13:37

0

genericSet本身就已经是一个int *; &genericSetint **,指向指向int的指针。

+0

-1错误类型 – 2011-05-12 05:32:24

1

只是返回genericSet而没有前面的&。它已经是一个指针类型,因为它具有[]作为其类型的一部分。

C++中的指针/数组的相似性很重要,因此我建议您在阅读该语言的过程中阅读它。

5

我不知道为什么大家都在回答这个问题& genericSet是一个int **;它不是。澄清:

int genericSet[] = {1,2,3,4}; 
typedef int (*ArrayPtr)[4]; 
int* f1() { return genericSet; } 
ArrayPtr f2() { return &genericSet; } 
+0

+1不欺骗OP。 – 2011-05-12 05:32:06