c - 二进制 * 的无效操作数(有 'double *' 和 'double *' )

标签 c arrays

我有一个在 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/

相关文章:

c++ - 将二维数组传递给 C++ 中的函数时出错

javascript - 如何根据 javascript 中的某个键将一维数组转换为二维数组?

php - 从具有重复值的 MySQL 在 PHP 中创建关联数组

c - Ubuntu,如何在 C 中链接 .exp 文件?

c - 嵌入式程序中需要说明一段代码

c - 将文本文件的每一行存储到数组中

javascript - 如何在二维javascript数组中设置一个值

arrays - 将数组数组转换为哈希数组

C 使用指针创建矩阵,然后从矩阵中复制元素

c++ - 使用strcat时访问冲突写入位置错误