gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 05:56:24 27 4
gpt4 key购买 nike

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com