将可变大小的二维数组传递给函数

时间:2015-11-22 08:19:01

标签: c++ multidimensional-array

运行代码时出现此错误:

[错误]数组绑定在']'之前不是整数常量令牌

以下是代码的一部分:

using namespace std;
int R,C;
bool isSafer(int grid[][C],int row,int col, bool visited[][C])
{
    if(row<R && row>=0 && col<C && col>=0 && grid[row][col] && visited[row][col])
    {
        return true;
    }
    return false;
}
int main()
{
  ....
  ....
  cin>>R>>C;
  int grid[R][C];
  ....

}

在int main()中,我向用户询问R和C的输入。我还在main函数中声明了数组,并在上面提到的函数中调用了。请建议我如何将我的数组传递给函数,并将参数作为用户采用的变量。

1 个答案:

答案 0 :(得分:1)

C ++中没有可变长度数组。这意味着,遵循代码

int w, h;
std::cin >> w >> h;
int a[w][h];

是非法的。如果它适合您,那是因为您的编译器支持它作为扩展(作为不属于标准C ++的附加功能)。其他编译器可能不支持它。即使它适合你,你也无法将它传递给它。

有以下解决方案:

  • 使用嵌套的std :: vector。这很容易,但对于2D阵列来说可能稍微慢一些,或者内存昂贵。
  • 将2D数组转换为int的1D数组,并分别传递宽度。我认为是最佳解决方案。
  • 使用指向new的一维指针数组 - 分配int的一维数组。并将其作为int **param传递。
  • 如果您只需更改阵列的一个维度,则可以执行类似constexpr int w = 5; int *a[w] = new int[h][w];的操作。如果您需要更改这两个尺寸,则无法使用。
相关问题