【发布时间】:2018-10-17 20:43:06
【问题描述】:
我正在尝试在 C 中测试一个算法,但是在尝试调用该函数时,我在我的主函数中调用该函数的那一行出现错误“预期表达式”。有人能发现其中的错误吗?
#include <math.h>
#include <stddef.h>
int fwsubst(
unsigned long n,
double alpha,
double **R, /* two-dimensional array, row-major */
double *b /* one-dimensional array */
);
int main(void){
fwsubst(2 ,5.0,{{2.0,2.0},{4.0,2.8}}, {1.0, 9.6});
return 0;
}
int fwsubst(
unsigned long n,
double alpha,
double **R, /* two-dimensional array, row-major */
double *b /* one-dimensional array */
){
double x;
for (size_t k = 0; k < n; k++) {
double sum = 0.0;
for (size_t i = 0; i < k; i++) {
sum += b[i] * R[i][k];
}
x = (b[k] - sum)/(alpha + R[k][k]);
if (!isfinite(x))
return -1;
if(alpha + R[k][k] == 0)
return -1;
b[k] = x;
}
return 0;
}
【问题讨论】:
-
compound literals 可能很有趣,但对于多维数组,单独的变量更容易且更惯用。
-
旁白:
if (!isfinite(x)) return -1;真的是编码目标吗?我希望if (isfinite(x)) return -1;寻找一根杆子。 (没有!) -
注意:
double **R不是二维数组。这是一个pointer to pointer to double。R[i]是指向double的指针。对于double A[3][4],A 是一个二维数组。