【发布时间】:2018-10-25 18:18:49
【问题描述】:
我在这段代码中有一个错误:
mat mat_y(mat b, mat l, int n) {
mat c = c = mat_new(n);
for(i=0; i<n; i++)
{
c[i]=b[i];
for(j=0; j<i; j++)
{
c[i] -= l[i][j] * c[j];
}
}
return c;
}
错误:
二进制 * 的无效操作数(有 'double' 和 'double *')
这里有一些信息:
typedef double **mat;
int i,j,k;
void mat_zero(mat x, int n) {
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
x[i][j] = 0;
}
mat mat_new(int n) {
mat x = malloc(sizeof(double*) * n);
x[0] = malloc(sizeof(double) * n * n);
for (i = 0; i < n; i++)
x[i] = x[0] + n * i;
mat_zero(x, n);
return x;
}
【问题讨论】:
-
您的类型没有排队。你试图混淆一个指向双精度和双精度的指针。它在抱怨哪一行?
-
c[j]是指向双精度的指针。消息有什么不清楚的地方吗? -
mat_new搞砸了。您错误地分配了一个二维数组;它是一个数组数组和一个使用数学来确定列的一维数组的邪恶组合。 -
在
typedef中隐藏指针不是一个好主意。这会导致混乱。 -
并在
for循环中使用大括号
标签: c