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

时间:2014-04-06 01:34:13

标签: c++

它为此for循环中的行*(repetitions + x)++;提供了此错误。任何线索为什么?

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

2 个答案:

答案 0 :(得分:1)

您无法增加右值repetitions + x。这与写作错误相同:

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

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

您可能想写(*(repetitions + x))++;,可以更明确地表达为repetitions[x]++;

答案 1 :(得分:-1)

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

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

++*(repetitions + x);

或:

(*(repetitions + x))++;