【发布时间】:2018-10-28 23:50:48
【问题描述】:
我正在尝试在 C 中对矩阵进行乘法运算。乘法函数也称为点积函数。以下是我得到的函数和 3 个错误:
char dotProduct(void *A, void *B, int N, int i, int j) {
char result;
while(i < N - 1) {
while(j < N - 1) {
result += A[N * i + j] * B[N * i + j]; // error: invalid operands to binary expression ('void' and 'void')
j++;
}
i++;
}
return result;
}
void multiply(void *A, void *B, void *C, int N) {
for(int i = 0; i < N - 1; i++) {
for(int j = 0; j < N - 1; j++) {
C[N * i + j] = 0; // error: incomplete type 'void' is not assignable
for(int k = 0; k < N - 1; k++) {
C[N * i + j] += dotProduct(A, B, N, i, j); // error: subscripted value is not an array , pointer or vector
}
}
}
}
我不确定这些错误是什么意思。例如,“下标值不是数组、指针或向量”:它是一个数组,我不知道为什么我不能做那个操作。另外,另外两个,我不明白他们的意思。有人可以详细说明吗?
【问题讨论】:
-
如何将两个空隙相乘?为什么你甚至使用空隙?你为什么使用 char 作为结果?
-
@kingW3 我使用 voids 因为我没有传递数组的类型
-
你没有什么?被传递的数组的类型?你的句子中缺少一个动词(你不知道?)
void是void,你不能有void a;变量,如果是通用指针,void*类型- 它不是指针,不是数组,也不是向量(C 中没有向量这样的想法)。您可以从研究qsort函数实现开始,了解如何编写 C 程序来处理泛型类型。
标签: c matrix matrix-multiplication