我在动态创建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
任何想法?
答案 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];
}
}