int **multiply(int **A, int **B, int N){
int **C = new int*[N];
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
for (int k = 0; k < N; k++)
C[i][j] = C[i][j] + A[i][k] * B[k][j];
}
}
return (C);
}
将矩阵作为指针的指针并不是一个好主意。为了正确地做到这一点,你需要一个相当复杂的:
int **C = new int*[N];
for(int i = 0; i < N; ++ i)
C[i] = new int[M];
Where i is in [0, N)间隔和j is in [0 to M)间隔。这些实际上与编译器生成对恒定大小的二维数组的访问的方式非常相似(因此乘法实际上成本并不太高,并且在考虑缓存时,整个过程可能比数组的数组快得多)。上面两行之间的区别在于,一行是列优先(当展开到一维时,列的元素是连续的项)或交替行优先。这是一个约定俗成的问题。默认的“C”数组将以行优先。一些库,例如 OpenGL 或 Eigen 使用列专业。