在C ++中使用new表达式制作arr [n] [n]

时间:2018-10-15 04:43:03

标签: c++ arrays new-operator

我目前正在处理此代码。但是有一些问题。首先,如果我运行此代码,它将显示array size in new-expression must be constant。如果我将数组制作为arr[n],则不会出现此错误消息。同样,此代码在到达行cout << arr[i][j] << endl;时也会产生错误消息,指出invalid types 'int[int]' for array subscript.我不明白为什么会出现此错误消息,因为我将数组arr[n][n]而不是arr[n] 。 如果我在参数行中键入n,我想用此代码显示n * n的魔方。

这是我的main.cc

#include <iostream>
#include <cstdlib>
#include <cstring>
#include "magic_square.h"
using namespace std;

int main(int argc, const char** argv) {
    int n = atoi(argv[1]);
    int *arr = new int[n][n];

    if (n % 2 == 0 || n < 3)
        return 0;
    else
        magicSquare(n, arr);
    for (int i = 0, j = 0; i < n, j < n; i++, j++)
        cout << arr[i][j] << endl;

    delete[] arr;
    return 0;
}

这是我的magic_square.cc。我没有添加magic_square.h,因为它只是功能void magicSquare(int n, int* arr)的声明。

#include <iostream>
#include "magic_square.h"

void magicSquare(int n, int* arr) {

    for (int i = 0, j = n/2, num = 1; num <= n*n; num++) {
        arr[i][j] = num;
        if (num % n == 0) {
            i++;
        }
        else {
            i--, j++;
            if (i < 0)
                i = n - 1;
            if (j > (n - 1))
                j = 0;
        }
    }
}
~                                                                           

有人可以帮助我解决此错误吗?预先感谢!

1 个答案:

答案 0 :(得分:0)

考虑到for条件正好起作用,因为两个逗号分隔的表达式同时为真。

for (int i = 0, j = 0; i < n, j < n; i++, j++)

该结束条件只相当于最后一次测试,因为其结果将是逗号分隔表达式的结果。

可能您应该写成这样:

for (int i = 0, j = 0; i < n && j < n; i++, j++)