我问这个是因为我的程序有两个乘法矩阵的函数,它们只乘以 4x4 和 4x1 矩阵。标题是:
double** mult4x1(double **m1, double **m2);
double** mult4x4(double **m1, double **m2);
他们做 m1*m2 并以 **double 的形式返回它,下面是 4x4 乘法的片段。
double** mult4x4(double **m1, double **m2){
double** result = (double**) malloc(sizeof(double)*4);
for (int i = 0; i < 4; i++) {
result[i] = (double*) malloc(sizeof(double)*4);
}
...multiply...
return result;
}
mult4x1 和 mult4x4 之间的区别仅在于它们内部使用的索引。
我有这三个矩阵:
double m1[4][4] = {
{2, 3, 5, 6},
{9, 8, 1, 7},
{5, 4, 3, 1},
{7, 6, 1, 2}
};
double m2[4][4] = {
{1, 0, 0, 0},
{0, 1, 0, 0},
{0, 0, 1, 0},
{0, 0, 0, 1}
};
double m3[4][1] = {
{2},
{3},
{3},
{1}
};
试图将这些矩阵相乘会发生错误。
double** test = mult4x4(m1, m2);
double** test2 = mult4x1(identity4x4(), m3);
//identity4x4() creates a 4x4 identity matrix - double** identity4x4();
产量:
错误:不能为参数double * mult4x4(double* , double *)'转换
double (*)[4]' to
double* '1' to
错误:无法为参数double * mult4x1(double* , double *)'转换
double (*)[1]' to
double* '2' to
double[][] 不应该等于 **double 吗?一个双精度数组。欢迎任何澄清、误解和错误。