2017-03-08 237 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矩阵。此刻我的电脑坏了,所以我可以在代码中描述这一点。