【问题标题】:How can I pass a variably sized 2d array to a function?如何将可变大小的二维数组传递给函数?
【发布时间】:2016-02-17 17:15:14
【问题描述】:

我正在生成 3 个 nxn 大小的幻方(其中 n 是 3 到 15 之间的奇数),并希望将它们存储的二维数组传递给此函数:

void printSquare(int n, int square[n][n], int b){
    cout << "Magic Square #" << b << " is:\n";

    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
            printf("%3d ", square[i][j]);
        printf("\n");
    }
}

数组像这样传递给函数:

 printSquare(n, magicSquare, 1);

但是,无论我如何尝试更改它以使函数接受具有未定义大小的二维数组,我都会不断收到诸如“候选函数不可行:没有已知转换”之类的错误 从 'int [n][n]' 到 'int (*)[n]' for 2nd argument"。我该如何解决这个问题,以便我可以在我的函数中使用二维数组?

【问题讨论】:

标签: c++ arrays multidimensional-array


【解决方案1】:

在 c++ 中,多维数组需要除顶部维度之外的所有维度的大小作为类型的一部分。所以二维数组的类型可以是 int a[][3],但不是 int a[][]。

假设 n 不是一个常数,最好的办法是将 square 视为一维数组,然后使用 n,它你传入,索引到 square,像这样:

for(int i=0; i<n*n; i++)
{
    printf("%3d ", square[i]);
    if((n-1)==(i%n))
        printf("\n");
}

【讨论】:

  • 这个重复的问题可以找到更完整的答案:Passing a 2D array to a C++ function
  • 您可以使用指向指针的指针,不必将其折叠为一维数组。即上面示例中的 int**。
猜你喜欢
  • 2017-07-26
  • 2012-04-27
  • 1970-01-01
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-22
相关资源
最近更新 更多