将整数传递给函数内的数组(不带指针)

时间:2015-02-19 22:37:38

标签: c++ arrays function constants

我试图创建一个可以打印四种不同网格尺寸(5x5,7x7,9x9,15x15)的魔方。我遇到的错误是函数中的数组magsquare告诉我它需要一个常量整数。 (我不能使用指针)这是一个类赋值。

#include <iostream>
#include <iomanip>
using namespace std;

void magicSquare(int n){
int magsquare[n][n] = { 0 };    /*THIS is the error with [n][n]*/

int gridsize = n * n;
int row = 0;
int col = n / 2;

for (int i = 1; i <= gridsize; ++i)
{
    magsquare[row][col] = i;

    row--;
    col++;

    if (i%n == 0)
    {
        row += 2;
        --col;
    }
    else
    {
        if (col == n)
            col -= n;
        else if (row < 0)
            row += n;
    }
}
for (int i = 0; i < n; i++){
    for (int j = 0; j < n; j++){
        cout << setw(3) << right << magsquare[i][j];
    }
    cout << endl;

}

}
int main(){
    int n = 5;
    magicSquare(n);
    return 0;
}

缩进可能看起来不正确,但是没错。遗憾。

1 个答案:

答案 0 :(得分:2)

失败是因为标准C ++无法在堆栈上分配动态大小的数组,正如您尝试的那样。

int magsquare[n][n];

magicSquare而言n仅在运行时已知,并且要在堆栈上分配数组,它的大小必须在编译时知道。

使用15 x 15阵列。

int magsquare[15][15];

只要你知道这是你所需要的最大的,你应该没问题。

替代品(您已经说过,您可以使用)

  • 使用new声明所需尺寸的二维数组。 (记得删除[]但是)
  • 使用std::vector

添加一个超过15或低于1的n值的检查也是一个好主意,否则,如果将1-15之外的任何值传递给函数,则您将面临未定义的行为。