如何在函数中返回二维数组?

时间:2013-05-12 12:27:18

标签: c++ arrays multidimensional-array

我想知道如何在我的函数中返回一个二维数组。我的代码是这样的:

int[][] function ()
{
    int chessBoard[x][x];
    memset(chessBoard,0,x*x*sizeof(int));
    return chessBoard;      
}

我收到错误消息:“错误:在我的第一行'''token'之前出现意外的unqualified-id。关于如何使我的功能正常工作的任何提示?

2 个答案:

答案 0 :(得分:1)

使用矢量矢量代替:

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;
}

答案 1 :(得分:0)

不幸的是,无法从函数返回数组。标准中明确规定了这一点。

  

C ++ 11标准§8.3.5功能

     

函数的返回类型不应为   类型数组或函数,尽管它们可能具有类型指针的返回类型或对此类事物的引用。

但现代C ++实践建议您使用STL容器来促进令人困惑的语法和内存分配。在您的特定设置中,我们可以使用std::vector

替换您的C风格数组
std::vector< std::vector<int> > function()
{
    return std::vector< std::vector<int> >(x, std::vector<int>(x));
}