难以理解 C 中数组的增量运算符

Trouble understanding increment operators with arrays in C

我无法理解 C 中关于运算符 ++ 和数组的使用的概念。我知道 ++ 会增加一个值,但我 运行 变成了一个对我来说没有任何意义的代码片段:

  while((c = getchar()) != EOF)
  {
    if(c < NUM_CHARS)
    {
      thisval = ++freqarr[c];
      if(thisval > maxval)
      {
        maxval = thisval;
      }
    }

thisval = ++freqarr[c]; 行对我来说意义不大。 是不是说thisval给数组增加了一个额外的索引或者值?

我还是C的新手,所以我不确定这在C中是否常见,如果不是或看不起,请告诉我。

前缀 ++ 运算符递增其操作数,结果表达式具有递增的值。

所以这一行做了两件事:

  • 它递增 freqarr[c] 的值,它是数组的成员
  • freqarr[c]的增量值赋值给了thisval

前缀 ++ 的优先级低于 [],请参阅 https://en.cppreference.com/w/c/language/operator_precedence。所以这相当于thisval = ++(freqarr[c]);。它获取数组的第 c 个元素,并递增该元素,然后将新值分配给 thisval。就像:

freqarray[c] = freqarray[c] + 1;
thisval = freqarray[c];

我假设 c 被定义为一个 int 并且 freqarr 被定义为一个数组。 (通常最好在您的问题中包含 Minimal, Reproducible Example)。

前缀 ++ 运算符递增一个对象并产生递增的值。 freqarr[c] 是一个对象。它恰好是数组元素的事实与此无关。它的工作方式与应用于简单命名变量的方式相同。

请注意,索引运算符 []++ 绑定得更紧密,因此表达式 ++freqarr[c] 等价于 ++(freqarr[c]).