难以理解 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])
.
我无法理解 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])
.