2012-04-25 183 views
3

我試圖定義和C使用2D陣列++靜態2D陣列

const float twitterCounts[][5] = { 
     {1,0,0,0,0}, 
     {0,2,0,0,0}, 
     {0,0,3,0,0} 
}; 

返回這樣的:

const float ??? TwitterLiveData::data() { 
    return twitterCounts; 
} 

和使用它像這樣

float x = TwitterLiveData::data()[1][1]; 

什麼是靜態訪問器的正確簽名?

+3

只使用一個矢量就容易多了。這有可能嗎? – chris 2012-04-25 18:10:52

回答

5

您不能返回數組,但可以將指針返回到其第一個元素或對該數組的引用。你必須把正確的類型簽名:

const float (*TwitterLiveData::data())[5] { 

或許

const float (&TwitterLiveData::data())[3][5] { 
+0

這解決了我的感謝! – user1356937 2012-04-25 18:24:23

0

它取決於你的編譯器,但大多數情況下雙數組的名字被視爲雙指針。 所以在你的情況下,twitterCounts是一個float **。

+3

不正確。 'twitterCounts'永遠不會是'float **',但是作爲float [5]類型的數組,它會衰減成一個指向'float [5]'的類型的指針。所以'twitterCounts'「是一個」(衰減)'浮動(*)[5]' – Anthales 2012-04-25 18:17:07

3

參見:https://stackoverflow.com/a/10264383/365496

摘要:

#include <array> 

const std::array<std::array<float,5>,3> 
twitterCounts = { 
     {1,0,0,0,0}, 
     {0,2,0,0,0}, 
     {0,0,3,0,0} 
}; 

const std::array<std::array<float,5>,3> 
TwitterLiveData::data() { 
    return twitterCounts; 
} 

你可能不希望返回按價值排列的數組可能會過於昂貴。你可以參考返回數組來代替:

const std::array<std::array<float,5>,3> &TwitterLiveData::data(); 

在這兩種情況下,你想要的語法float x = TwitterLiveData::data()[1][1];作品。

+0

我喜歡這個,很簡單,謝謝。 – user1356937 2012-04-25 18:23:49