需要左值作为增量操作数 (2)

lvalue required as increment operand (2)

本文关键字:操作数      更新时间:2023-10-16

它给了我这个 for 循环中的行*(repetitions + x)++;这个错误。有什么线索吗?

for (int y = 0; y<hours; y++)
{
    if (*(array + x) == *(array + y))
    {
        *(repetitions + x)++;
    }
}     

不能递增右值repetitions + x。这与写入错误相同:

int a = 3;
int b = 2;
(a+b)++;     // ????

++运算符需要一个左值,即变量的指定。 a+b是临时结果,并且没有内存地址,因此无法递增。

有可能

你的意思是写(*(repetitions + x))++;,这可以更清楚地表达为repetitions[x]++;

解析为*((repetitions + x)++) - 也就是说,它尝试修改常量地址,然后取消引用它。大概您打算增加地址指向的内容。

您可以通过几种不同的方式做到这一点。一种是使用括号。另一个使用预递增:

++*(repetitions + x);

或:

(*(repetitions + x))++;