C 使用指向数组的空指针乘以矩阵

C 使用指向数组的空指针乘以矩阵,c,matrix,matrix-multiplication,C,Matrix,Matrix Multiplication,我试图在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: inv

我试图在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点积(void*A,void*B,int N,int i,int j){
字符结果;
而(i

我不确定这些错误是什么意思。例如,“下标值不是数组、指针或向量”:它是数组,我不知道为什么我不能做那个操作。另外,另外两个,我不明白他们的意思。有人能详细说明一下吗?

如果要使用
void
,还需要通过数组的跨距,否则元素的间距未知。如果使用8位、16位或32位浮点(或整数),则需要表示这一点,否则编译器不知道元素之间的间距,也不知道指针增量在内存中应该有多远。即使您大步通过,编译器也不知道当您将两个
void
相乘时,您的意思是什么

<>如果我在C中这样做,我可能会把类型化的版本写出来,或者模仿C++模板:
#define DEFN_DOT_PRODUCT(TYPE, suffix) TYPE dotProduct##suffix(TYPE *A, TYPE *B, int N, int i, int j) { \
    TYPE result = 0; \
    while(i < N - 1) { \
        while(j < N - 1) { \
            result += A[N * i + j] * B[N * i + j]; \
            j++; \
        } \
        i++; \
    } \
    return result; \
}
DEFN_DOT_PRODUCT(int, i);
DEFN_DOT_PRODUCT(float, f);
DEFN_DOT_PRODUCT(double, d);
#undef DEFN_DOT_PRODUCT

/* use */
dotProducti(/* whatever */)
#定义DEFN_DOT_PRODUCT(类型,后缀)类型dotProduct##后缀(类型*A,类型*B,int N,int i,int j){\
类型结果=0\
而(i
如何将两个空隙相乘?你为什么还要使用空隙?为什么要使用char作为结果?@kingW3我之所以使用voids,是因为我不知道要传递的数组的类型。你不知道什么?正在传递的数组的类型?你的句子中缺少一个动词(你不知道?)
void
void
,你不能有
void a变量,如果是泛型指针,则键入
void*
它不是指针,不是数组,也不是向量(C中没有向量)。您可以从学习
qsort
函数实现开始,了解如何编写C程序来处理泛型类型。