2017-10-28 95 views
0

當我輸入兩個矩陣時,結果矩陣不顯示正確的答案,是我的算法錯誤還是我不應該以這種方式使用指針? 請幫忙!使用指針在c中乘以矩陣

main() { 

    int a[3][3],b[3][3],c[3][3],*p[3],*q[3],*r[3],j1=0; 

    // 1st Matrix 

    for(int i=0;i<3;i++){ 
     for(int j=0;j<3;j++){ 
      scanf("%d",&a[i][j]); 
     } 
    } 

    // 2nd matrix 

    for(int i=0;i<3;i++){ 
     for(int j=0;j<3;j++){ 
      scanf("%d",&b[i][j]); 
     } 
    } 

    // Assigning pointers 

    for(int i=0;i<3;i++) p[i]=&a[i][0]; 
    for(int i=0;i<3;i++) q[i]=&b[i][0]; 
    for(int i=0;i<3;i++) r[i]=&c[i][0]; 

    // Resultant Matrix 

    for(int i=0;i<3;i++){ 
     *(*(r+i)+j1) = 0; 
     for(j1=0;j1<3;j1++){ 
      printf("%d\t",*(*(r+i)+j1)); 
      *(*(r+i)+j1) += *(*(p+i)+j1) * *(*(q+j1)+i); 
     } 
     j1 = 0; 
    } 

    for(int i=0;i<3;i++){ 
     for(int j=0;j<3;j++){ 
      printf("%d\t",c[i][j]); 
     } 
     printf("\n"); 
    } 
} 
+0

「是我的錯嗎?」 ¯\ _(ツ)_ /¯ – DimChtz

+0

如果變量具有有用的名稱,理解代碼會容易得多... – Borgleader

+1

計算合成矩陣的方程是否錯誤? –

回答

0

循環遍歷兩個維度並執行陣列abb轉置的逐元素乘法。我懷疑你想要執行矩陣乘法而不是元素乘法。要做到這一點,你需要三個循環:

  • 兩個循環迭代指數ij通過行和列c
  • 一個循環通過ab的公用維度迭代某個變量,如k,並將a[i][k]b[k][j]的乘積相加。
+0

狗屎。我剛剛意識到我犯的錯誤。該結果指針指向c數組中使用的j1變量。謝謝。 –