2013-09-27 126 views
0

我有一個需要返回一個指針數組的函數:返回一個指向數組的指針C++

int * count() 
{ 
    static int myInt[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    return &myInt[10]; 
} 

我的主函數中我想顯示這個數組的整數之一,喜歡這裏的指數3

int main(int argc, const char * argv[]) 
{ 
    int myInt2[10] = *count(); 

    std::cout << myInt2[3] << "\n\n"; 
    return 0; 
} 

然而,這給我的錯誤:「數組初始化函數必須是一個初始化列表」

我該如何創建一個使用指針來獲得相同的Elemen我的主函數中的數組ts作爲指針數組?

+0

使用向量或std :: array代替 – taocp

+1

數組和指針是等價的但不相同。請參閱C常見問題解答:http://c-faq.com/aryptr/aryptrequiv.html – kfsone

+0

老兄,我並不是說這是光顧的,但是這個代碼有很多原因是有缺陷的。真正最好的做法是讀一本書。我推薦C編程語言(Kernighan&Ritchie);它對我所遇到的指針有最好的解釋,並且在這方面同樣適用於C++。你會在本章末尾知道指針爲什麼int myInt [10] = * count()不可能做你想做的事情。 – Bathsheba

回答

4

在你的代碼的幾個問題:

1),你需要一個指針計數返回數組的開頭:

return &myInt[0]; 

return myInt; //should suffice. 

然後,當您初始化myInt2:

int* myInt2 = count(); 

還可以將一個陣列複製到其他:

int myInt2[10]; 
std::copy(count(), count()+10, myInt2); 

注意複製將使用比第一獨立的存儲創建第二個陣列。

+0

這可能是OP所需要的,但它不能準確回答問題。 OP在他的主要功能和他的其他功能中需要一個數組。所以在某些時候,數組元素必須從一個數組複製到另一個數組。 – john

+0

優秀評論,我添加了一個複製數組到一個新的筆記。 – pippin1289

1

你不需要指針,引用是好的。

int (&count())[10] 
{ 
    static int myInt[10] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; 
    return myInt; 
} 

int main(int argc, const char * argv[]) 
{ 
    int (&myInt2)[10] = count(); 

    std::cout << myInt2[3] << "\n\n"; 
    return 0; 
} 
相關問題