在这段代码(C ++)中,我尝试向前移动指向2D数组的一个“行”的指针到下一行,副行为下一行。所以我试过这段代码:
void bubleSort(char mat[][WORDS]) {
for (int i = LETTERS; i >= 0; i--) {
int position = 0; //This variable is used to move forward in case of same previous letters
for (int j = 1; j < i; j++) {
if (mat[j][position] < mat[j - 1][position]) { //If the words are not sorted according to alphabetic order,
mat[j]--; //swap the poniters of the rows of their letters positions,
mat[j - 1]++;
position = 0; //and initilize 'position' for the next words check.
}
else if (mat[j][position] == mat[j - 1][position]) { //If current position of letter have the same letters,
position++; //jump to next position,
j = ((position < LETTERS - 1) ? j - 1 : i); //and move 'j' back to recheck the words.
}
else position = 0; //if thoose words stay in their place, initilize 'position' for next checking
}
}
}
然后编译器说“表达式必须是一个可修改的左值”关于这些行:
mat[j]--; //swap the poniters of the rows of their letters positions,
mat[j - 1]++;
我该如何解决?
感谢。
答案 0 :(得分:1)
语法char array[][N]
表示您使用的是平面2D数组,所有数据都按顺序放置在一个位置。第二行在内存中的第一行之后,并且索引实际上被计算为x * N + y(对于array [x] [y])。因此,每行没有指针。如果要直接交换行而不是复制行,则需要定义一个指针数组并填充它。
此外,递增一行&#39;可能永远不会是你想要的,因为指针只会指向同一行中的下一个元素。您需要实际交换指针(可以使用std::swap
)来交换行。