所以我查看了一些在线问题,以弄清楚如何设置和填充动态多维数组,我认为我把它弄下来但由于某种原因,我的函数不会访问第一(0)列之后的任何内容。对于我的测试,我放入了一个2X2阵列:
2 2 (part of another function that gives the size of the matrix) 1 2 3 4
当我调试它时,我只得到
1 random# from initializing the array 3 random# from initializing the array
我不确定这段代码我做错了什么,我也是C ++的新手。
double* matrix_read(const int m, const int n)
{
double **mat = new double*[m];
for (int j = 0; j < m; ++j) {
mat[j] = new double[n];
}
for (int i = 0; i < m; ++i) {
for (int j = 0; j < n; ++j) {
cin >> mat[i][j];
}
}
double debug = mat[2][2];
return *mat;
}
在main函数中,这是我发送给函数的内容。
int x, y, m, n;
cin >> x;
cin >> y;
double *mat_a = matrix_read(x, y);
cin >> m; //2nd matrix read in
cin >> n;
double *mat_b = matrix_read(m, n);
答案 0 :(得分:0)
您的矩阵表示为一个指针数组,数组中的每个指针依次指向一个双精度数组。这些数组中的每一个在内存中是连续的,但在它们之间不是连续的。这意味着mat[0][0]
正好在mat[0][1]
内存之前。但mat[1][0]
可能位于完全不同的位置。
只返回矩阵的第一行*mat
(与mat[0]
相同),您将丢失信息。您可以访问的只是第一行。
你应该返回整个矩阵。
double** matrix_read(...) {
...
return mat;
}
(编辑:此外,有人必须稍后删除矩阵......他们必须删除几个数组,呃。你应该为矩阵制作一个结构包装器,或者使用单个数组,或者使用向量矢量)