将2D阵列转换为1D

时间:2017-03-08 23:31:15

标签: c for-loop multidimensional-array

以下是2D数组a,b,c的代码:

c:/> g++ HelloWorld.cpp

结果是:2 4 2 4 4 8 4 8

我编写了这段代码,将数组c [i] [j]转换为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 3 2 3 4 6 4 6

3 个答案:

答案 0 :(得分:1)

也许你想要这个1D数组的索引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]);
        }
    }
}

答案 1 :(得分:0)

c [i] [j]在第二个中没有改变。但它在第一个中发生了变化。

答案 2 :(得分:0)

将全局数组创建为大小为4 * m的计算数组,其中m是2x2矩阵的数量。然后使用do while循环,其中循环计数器变量用于计算一组四个元素的指针。将该指针传递给一个方法,该方法从左到右逐行提取2x2矩阵元素到全局数组中。在方法中使用指针引用但不增加方法中的指针。返回方法时,如果有更多的4个元素组进行处理,则重新计算指针并处理下一个2x2矩阵。我的电脑目前坏了,所以我可以用代码来描述。