如何将可变大小的2d数组传递给函数?

时间:2016-02-17 17:15:15

标签: c++ arrays multidimensional-array

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

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

然而,无论我如何尝试更改它以使函数接受具有未定义大小的2d数组,我仍然会遇到类似&#34;候选函数不可行的错误:没有已知的转换       来自&#39; int [n] [n]&#39;到&#39; int(*)[n]&#39;第二个参数&#34;。我如何解决这个问题,以便在函数中使用二维数组?

1 个答案:

答案 0 :(得分:0)

在c ++中,多维数组需要除顶部维度之外的所有维度的大小作为类型的一部分。所以2d数组的类型可以是int [] [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");
}