将二维数组传递给C中的函数时发生意外行为

问题描述

我认为我做得很好,但是由于某种原因,当我运行输出中的程序时,数组结果的第一行加倍,就好像它“克隆”了第一到第二个一样。如果在调用打印之前打印结果,那一切都很好,但是如果我尝试在函数中打印结果,那一切都会出错。 而且所有功能都在头文件中声明

void product(int raw1,int raw2,int col1,int col2){

    int k,i,j,l,element;
    int matrix1[raw1][col1],matrix2[raw2][col2],result[raw1][col2];

    for(i = 0; i < raw1; i++){
      for(j = 0; j < col2; j++){
        result[i][j] = 0;
      }
    }

    printf("Inserimento matrice 1\n");
    for(i = 0; i < raw1; i++){
      for(j = 0; j < col1; j++){
        printf("place [%i][%i]: ",i + 1,j + 1);
        scanf("%i",&matrix1[i][j]);
      }
    }

    printf("\nInserimento matrice 2\n");
    for(i = 0; i < raw2; i++){
      for(j = 0; j < col2; j++){
        printf("place [%i][%i]: ",&matrix2[i][j]);
      }
    }

    k = 0,i = 0,j = 0,l = 0,element = 0;

    printf("\n");
    do{
      do{
        do{
          //calcolo coefficiente di result
          element += matrix1[i][j] * matrix2[j][l]; //eseguo moltiplicazione prima riga per prima  colonna ∑[Aik * Bkj]
          j++;  //scorro i coefficienti
        }while(j < col1); //quando ho scorso tutti i coefficienti che sono tanti quanti le colonne di A o le righe di B
        //inserisco il risultato nella matrice risultante
        result[i][k] = element;
        k++;  //mi preparo a inserire il nuovo risultato al ciclo successivo nel place adiacente
        l++;  //mi preparo a moltiplicare i coefficienti della colonna successiva di B per la riga di A
        j = 0;  //pongo j = 0 per moltiplicare nuovamente i coefficienti di colonna in A per i coefficienti di riga in B
        element = 0;  //pongo element = 0 per prepararlo a contenere il nuovo coefficiente
      }while( k < col2);  //quando termino il calcolo dei coefficienti della prima riga che deve avere un numero di colonne pari a quelle della seconda matrice
      i++;  //per andare alla prossima riga della matrice risultante e della matrice A
      j = 0;  //per moltiplicare i coefficienti di colonna in A per i coefficienti di riga in B a partire dal primo coefficiente
      l = 0;  //per rinziare dal primo elemento di colonna di B al ciclo successivo
      k = 0;  //per mettere sempre i risultati a partire dalla prima colonna
      element = 0;
    }while( i < raw1);

    print(result,raw1,col2);
}
    
void print(int result[][col2],int raw1,int col2){

    int i,j;

    for(i = 0; i < raw1; i++){
     for(j = 0; j < col2; j++){
       printf("%i,",result[i][j]);
     }
     printf("\n");
     }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...