expression必须是带有2D数组的可修改左值

时间:2014-12-12 08:18:35

标签: c++ arrays

在这段代码(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]++;

我该如何解决?

感谢。

1 个答案:

答案 0 :(得分:1)

语法char array[][N]表示您使用的是平面2D数组,所有数据都按顺序放置在一个位置。第二行在内存中的第一行之后,并且索引实际上被计算为x * N + y(对于array [x] [y])。因此,每行没有指针。如果要直接交换行而不是复制行,则需要定义一个指针数组并填充它。

此外,递增一行&#39;可能永远不会是你想要的,因为指针只会指向同一行中的下一个元素。您需要实际交换指针(可以使用std::swap)来交换行。