C 矩阵乘法函数won';t在主程序中编译

C 矩阵乘法函数won';t在主程序中编译,c,C,这是一个简单的矩阵乘法,代码不会编译。我还想把这个功能带到外面去。我知道我必须要有全局变量和函数声明,但代码甚至不会在main中编译 #include<stdio.h> #include<stdlib.h> #include<math.h> #define N 10 float *A[N], *B[N], *C[N]; int main(){ int count = 0, i,j, k; for (i = 0; i < N; i+

这是一个简单的矩阵乘法,代码不会编译。我还想把这个功能带到外面去。我知道我必须要有全局变量和函数声明,但代码甚至不会在main中编译

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 10

float *A[N], *B[N], *C[N];



int main(){

  int count = 0, i,j, k;


  for (i = 0; i < N; i++)
    A[i] = (float*)malloc(N * sizeof(float));
  for (i = 0; i < N; i++)
    B[i] = (float*)malloc(N * sizeof(float));
  for (i = 0; i < N; i++)
    C[i] = (float*)malloc(N * sizeof(float));


   for (i = 0; i <  N; i++)
     for (j = 0; j < N; j++){
        A[i][j] = ++count;
        B[i][j] = count;
        }

    void multiply(float* A, float* B, int n) {
       for(int i=0; i<n; i++)
         for(int j=0; j<n; j++)
           for(int k=0; k<n; k++)
             C[i][j] += A[i][k] * B[k][j];
    }

          for (i = 0; i <  N; i++)
            for (j = 0; j < N; j++)
              printf("%f\t", C[i][j] );

}
#包括
#包括
#包括
#定义n10
浮动*A[N],*B[N],*C[N];
int main(){
int count=0,i,j,k;
对于(i=0;i对于(inti=0;iA,B和C在顶部定义为全局的,作为浮点指针数组

在乘法函数中,您已将它们局部重新定义为指向浮点的指针

这就是乘法在乘法中失败的原因。 你假装A和B是要再次浮动的指针数组..并且它们已经被局部限定为要浮动的指针

这能满足你的期望吗

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

#define N 10

float *A[N], *B[N], *C[N];

void multiply( float *a[], float *b[], float *c[], int n ) 
{
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
           for(int k=0; k<n; k++)
                c[i][j] += (a[i][k]) * b[k][j];
}


int main(){

  int count = 0, i,j, k;


  for (i = 0; i < N; i++)
    A[i] = (float*)malloc(N * sizeof(float));
  for (i = 0; i < N; i++)
    B[i] = (float*)malloc(N * sizeof(float));
  for (i = 0; i < N; i++)
    C[i] = (float*)malloc(N * sizeof(float));


   for (i = 0; i <  N; i++)
     for (j = 0; j < N; j++)
     {
        A[i][j] = ++count;
        B[i][j] = count;
     }
     
    multiply(A,B, C, N);


    for (i = 0; i <  N; i++)
        for (j = 0; j < N; j++)
            printf("%f\t", C[i][j] );

}
#包括
#包括
#包括
#定义n10
浮动*A[N],*B[N],*C[N];
无效乘法(浮点*a[],浮点*b[],浮点*c[],整数n)
{

对于(int i=0;imain中的乘法函数定义使其成为C中不允许的嵌套函数。您可以调用函数中的任意多个函数,但不能在现有函数中定义新函数。
另外,您还没有调用乘法函数。

您不能在另一个方法中定义方法,用void multiplay删除行,并且结束结束括号
multiply
是一个嵌套函数。虽然这是可能的,但它是一种高级技术[在
c
代码中很少使用]。此外,您定义了函数,但实际上并没有调用它。因此,它什么也不做。将
multiply
的定义移动到文件范围[在
main
上方]--你会很高兴你这么做的。在
main
C中添加对它的调用不会指定在另一个函数中定义的函数。@pavel.lazar一个函数可能在另一个函数中声明。这是一个问题。Mahan Agha Zahedi:“我知道我必须有全局变量”-->这里不需要全局变量。我试图通过创建指针数组来创建2D数组。请您指导我,我要学习线性代数,所以我真的需要掌握C语言中的多数组处理。是的,就是这样!如果我想返回矩阵而不是空函数,我应该怎么做?