我想交换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;
}
但是如何交换整个列?
答案 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;
}
}