我想知道如何在我的函數中返回一個2d數組。我的代碼是這樣的:如何在我的函數中返回2d數組?
int[][] function()
{
int chessBoard[x][x];
memset(chessBoard,0,x*x*sizeof(int));
return chessBoard;
}
我得到錯誤信息:「錯誤:意外不合格-ID之前‘[’令牌」我的第一道防線。關於如何讓我的功能正常工作的任何提示?
我想知道如何在我的函數中返回一個2d數組。我的代碼是這樣的:如何在我的函數中返回2d數組?
int[][] function()
{
int chessBoard[x][x];
memset(chessBoard,0,x*x*sizeof(int));
return chessBoard;
}
我得到錯誤信息:「錯誤:意外不合格-ID之前‘[’令牌」我的第一道防線。關於如何讓我的功能正常工作的任何提示?
使用矢量的載體來代替:
template<typename T, size_t N>
std::vector<std::vector<T> > func()
{
std::vector<std::vector<T>> data(N, std::vector<T>(N));
return data;
}
int main (int argc, char ** argv)
{
std::vector<std::vector<int> > f = func<int, 10>();
return 0;
}
如果您正在使用C++ 11,你可以用std::array嘗試:
template<typename T, size_t N>
std::array<std::array<T, N>, N> func()
{
return std::array<std::array<T, N>, N>();
}
int main (int argc, char ** argv)
{
auto f = func<int, 10>();
return 0;
}
不幸的是,陣列不能從函數返回。標準清楚地說明了這一點。
C++11 Standard § 8.3.5 Functions
Functions shall not have a return type of type array or function, although they may have a return type of type pointer or reference to such things.
但現代C++實踐建議您使用STL容器來促進混淆語法和內存分配。在特定的設置,我們可以用一個std::vector
取代你的C風格的數組:
std::vector< std::vector<int> > function()
{
return std::vector< std::vector<int> >(x, std::vector<int>(x));
}
你有一個更大的問題:你的二維數組是在棧內存中分配。你不想返回(指向)(你應該複製它或使用堆內存或封裝它)。相關:http://stackoverflow.com/questions/8617683/return-a-2d-array-from-a-function – 2013-05-12 12:31:54
@Joe一個'int **'不會在這裏工作,沒有其他更改,因爲它不是佈局與2D陣列兼容。 – 2013-05-12 12:33:50
@sftrabbit謝謝。我只是刪除了我評論的那部分內容,因爲我沒有把注意力集中在這個問題上。 – 2013-05-12 12:40:38