我有一个在 C 语言中按顺序乘以矩阵的程序,我正试图完成它。我收到标题中列出的错误。
这是给我带来麻烦的行:
C[i,j] = C[i,j] + A[i,k] * B[k,j];
A、B、C 是二维数组。它们是用这段代码定义的:
A = (double **) malloc(sizeof(double *)*n);
for (r = 0; r < n; r++) {
A[r] = (double *) malloc(sizeof(double)*n);
}
B和C的定义同上。 n 是一个整数值,它定义了列和行的大小。
我不知道为什么会出现此错误。从我看过的其他一些问题来看,当操作的类型不正确时会出现此错误,但我不明白为什么会这样。有人有什么想法吗?
最佳答案
C 中没有多索引索引运算符。
您实际上是使用包含逗号运算符的表达式进行单索引。
逗号运算符总是返回它的第二个参数。
因此,使用普通索引两次,而不是尝试以某种方式在其中塞入第二个索引。
C[i,j] = C[i,j] + A[i,k] * B[k,j];
相当于:
C[j] = C[j] + A[k] * B[j];
不是你想要的:
C[i][j] = C[i][j] + A[i][k] * B[k][j];
顺便说一句,Don't cast the result of malloc (and friends) :
A = (double **) malloc(sizeof(double *)*n);
应该是不太容易出错的:
A = malloc(n * sizeof *A);
关于c - 二进制 * 的无效操作数(有 'double *' 和 'double *' ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26764710/