C 矩阵和向量相乘,逻辑错误
我有一个函数,它是矩阵和向量的乘积:C 矩阵和向量相乘,逻辑错误,c,arrays,matrix,C,Arrays,Matrix,我有一个函数,它是矩阵和向量的乘积: double *matrix_vector_multiply(int rows, int cols, double **mat, double *vec) { double *answer = malloc(rows * sizeof (double)); int i,j; for (i=0; i<rows; rows++) ans[i]=0; for
double *matrix_vector_multiply(int rows, int cols,
double **mat, double *vec)
{
double *answer = malloc(rows * sizeof (double));
int i,j;
for (i=0; i<rows; rows++)
ans[i]=0;
for (i=0; i<rows; rows++){
for (j=0; j<cols; cols++)
{
answer[i] = answer[i] + mat[i][j] * vec[j];
}
}
return ans;
}
double*matrix\u vector\u multiply(int行、int列、,
双**垫,双*vec)
{
double*answer=malloc(行*sizeof(double));
int i,j;
对于(i=0;i你有ans
和answer
。我希望你能找出剩下的;)这是你发布的实际代码吗?以及ans
和answer
等的明显问题,你的for循环完全错误,例如
for (i=0; i<rows; rows++)
用于(i=0;i两个for循环中的变量i和j从未改变,因为您似乎增加了行和列。这意味着您将始终在第二个for循环体中进行相同的求和。您的其他答案别无选择,只能保持在0,因为您从未在init之后计算它们的值。您将所有值存储为0ans
,然后返回ans
。answer
(i)为了你自己的利益,请习惯成语sizeof(*answer)
,而不是sizeof(double)
;(ii)发布一个我们可以运行和测试的示例。(iii)返回并初始化的ans
,没有声明;相反,您声明并修改answer
(iv)每次循环迭代,你都会增加行
和列
,但你的索引是i
和j
;这些循环是怎么结束的?为什么你要增加for循环中的行数和列数,而不是增加i和j?我遗漏了什么吗?为什么你要问一个新问题,而这个问题基本上是绕圈子的同样的问题?在你提出这些问题之前,请先阅读基本C。请不要使用2D数组的模拟来开始编程C。你有指向指针的指针,这些是不同的东西。至少从简单的事情开始,学习如何正确地使用for
循环之类的东西,传递对于这样的事情,对每个人来说都是浪费时间,包括你。我怀疑OP是否发布了原始代码,因为循环(I=0;I
永远不会结束,除非行==0
。当行的增量超过INT\u MAX时,它最终会结束。但代码无论如何都不会编译,除非ans
被声明为全局变量。
for (i=0; i<rows; i++)
for (j=0; j<cols; cols++)
for (j=0; j<cols; j++)