微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将二维数组传递给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 举报,一经查实,本站将立刻删除。