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