我正在生成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;。我如何解决这个问题,以便在函数中使用二维数组?
答案 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");
}