如何转换存储为C 1D阵列的二维矩阵

时间:2015-09-04 19:00:13

标签: c arrays matrix

我有一个2D矩阵

1 2 3
4 5 6
7 8 9

像这样存储在C中

int array[9] = {1,2,3,4,5,6,7,8,9};

我希望得到像这样的矩阵的转置

int array_t[9] = {1,4,7,2,5,8,3,6,9};

不将原始数组转换为2D数组。怎么办呢?

1 个答案:

答案 0 :(得分:7)

这可以通过切换通常用于索引它的循环来完成。如果你想要原始矩阵,你可以用这样的东西循环它

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

如果我们切换ij循环,我们可以获得所需的输出,如下面的示例程序

#include <stdio.h>

int main() {
    int array[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

    int i, j;

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

这与2D矩阵的转置的数学定义有关。 2D矩阵上的转置操作将行与列交换,在C程序中,当我们索引它时,我们交换行和列循环。