2011-05-12 98 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