2D结构数组:交换行和列?

时间:2019-12-06 00:18:03

标签: c arrays algorithm pointers

我想交换2D结构数组的整个列和行。

使用此代码,我可以交换行:

#define N 9 
typedef struct { 
    char number;
    bool editable; 
} FIELD;

int main(){
FIELD **f = (FIELD **) malloc(N * sizeof(FIELD *));
for (i=0; i<N; i++) {
    f[i] = (FIELD *) malloc(N * sizeof(FIELD)); 
}

//example: swap row 0 and row 8
FIELD *tmp;
tmp = f[0];
f[0] = f[8];
f[8] = tmp;
}

但是如何交换整个列?

3 个答案:

答案 0 :(得分:2)

没有用于列的指针交换。您将必须按照算法进行操作。

答案 1 :(得分:1)

要交换整个列,您应该遍历所有行:

//example: swap column 0 and column 8
FIELD tmp;
for (i=0; i<N; i++) {
    tmp = f[i][0];
    f[i][0] = f[i][8]
    f[i][8] = tmp;
}

答案 2 :(得分:0)

您必须按元素交换列。数组的布局使您可以通过交换指针来交换行,但是列元素每个都位于单独的行上。

void swap_cols (FIELD **f, int cola, int colb) {
    for (int i=0; i < N; ++i) {
        FIELD tmp = f[i][cola];
        f[i][cola] = f[i][colb];
        f[i][colb] = tmp;
    }
}
相关问题