2017-03-08 233 views
0

下面是代碼,用於2D陣列A,B,C:轉換2D陣列到1D

#include <stdio.h> 

    int main(){ 
     int a[2][2]= 
     { 
     {1, 1}, 
     {2, 2} 
     }; 

     int b[2][2]= 
     { 
      {1, 1}, 
      {2, 2} 
     }; 

     int c[2][2]= 
     { 
      {1, 1}, 
      {2, 2} 
     }; 

     //Loop for 2D 
     int i,j,k, n=2; 
     for (i = 0; i < n; i++) { 
      for (j = 0; j < n; j++) { 
       for (k = 0; k < n; k++) { 
        c[i][j] += a[i][k] * b[k][j]; 
        printf("%i ",c[i][j]); 
       } 
      } 
     } 
    } 

結果是:2 4 2 4 4 8 4 8

我寫這代碼,它將數組c [i] [j]轉換爲一維數組。運行後,我得不到相同的結果。

//Loop for 1D 

    int i,j,k, n=2, result[50]; 
    for (i = 0; i < n; i++) { 
     for (j = 0; j < n; j++) { 
      for (k = 0; k < n; k++) { 
       result[k] = c[i][j]; 
       result[k] += a[i][k] * b[k][j]; 
       printf("%i ", result[k]); 
      } 
     } 
    } 

這個循環的結果是:2個3 2 3 4 6 4 6

回答

0

也許你想要這個索引i+n*j一維數組。

int i,j,k, n=2, result[50]; 

for (i = 0; i < n; i++) { 
    for (j = 0; j < n; j++) { 
     result[i+n*j] = c[i][j]; 
     for (k = 0; k < n; k++) { 
      result[i+n*j] += a[i][k] * b[k][j]; 
      printf("%i ", result[i+n*j]); 
     } 
    } 
} 
+0

用這個我得到結果:2 3 2 3 4 6 4 6而不是:2 4 2 4 4 8 4 8 –

+0

好的,讓我爲你解決它:D,你應該基本上在這個循環之前保存'c'結果。 :)) – Mehdi

+0

是的,它的工作非常感謝你。我在for(k = 0; k

0

C [1] [j]的未在第二個改變。但是第一個改變了。

+0

結果[k]將與c [i] [j]相等,並且結果[k]是一維數組。結果[k] = c [i] [j]; –

0

創建一個全局數組作爲4 * m大小的計算數組,其中m是2×2矩陣的數量。然後使用do while循環,其中循環計數器變量用於計算一個由四個元素組成的指針。將該指針傳遞給一個方法,該方法從左到右提取2x2矩陣元素,逐行地將其提取到全局數組中。在方法中使用指針引用但不增加方法中的指針。如果有更多的4個元素組返回,則返回該方法,重新計算指針並處理下一個2x2矩陣。此刻我的電腦壞了,所以我可以在代碼中描述這一點。