C ++动态ND阵列

时间:2011-04-15 16:44:04

标签: c++ arrays

我在动态创建ND数组时遇到问题。 例如:

int **A = 0;
A = new int *[rowsA];

for (int i=0;i<rowsA;i++) {
    A[i] = new int[columnsA];
    for(int j=0;j<columnsA;j++) {
            cout << "Enter " << "(" << i << "," << j << "): ";
            cin >> A[i][j];
    }
}

传递给类似的函数:print_matrix(&amp; A [0] [0],rowsA,columnsA);

void print_matrix(int *A, int x, int y) {
     for (int i=0;i<x;i++) {
         for (int j=0;j<y;j++) {
                cout << A[i+j*x] << " ";
         }
         cout << ",";
     }
}

例如:

输入:1,2,3,4,5,6,7,8,9

输出:6位数6位数4,2位数5,3位数6

任何想法?

2 个答案:

答案 0 :(得分:3)

你的A变量是指针的数组(并且每个指针指向int的序列) - print_matrix期望指针直接指向{的序列{1}}的。这两种类型不兼容。

您需要将print_matrix设为int,或将A变量的使用更改为int **而不是A[i+j*x]

答案 1 :(得分:3)

如果ND阵列是指Iliffe vector,则表示您没有正确构建它。数据必须连续分配,因此在一次分配中,因为连续调用new返回的内存不一定是连续的。这应该做的工作:

int **A = new int *[rowsA];
int *data = new int[rowsA*columnsA];

for (int i=0;i<rowsA;i++) {
    A[i] = data + i*columnsA;
    for(int j=0;j<columnsA;j++) {
            cout << "Enter " << "(" << i << "," << j << "): ";
            cin >> A[i][j];
    }
}