根据结合性规则,++prefix是从右到左结合,而postfix++是从左到右结合。在下面的代码中,我尝试了这两个选项以及关系 (<) 检查。但我收到的答案似乎违反直觉。有人可以帮我解决这个问题吗?
在此声明中:
(++i < 5)
我希望如此
"++i"
首先被解释,因为它具有从右到左的关联性并且优先级高于“<”,然后是
"++i < 5"
待解释。相反,情况恰恰相反。下面是我用来尝试这个的完整程序。
#include <stdio.h>
int main(){
int i = 0, j = 0;
while (++i < 5)
{
printf("%d ", i);
}
puts("");
while (j++ < 5)
{
printf("%d ", j);
}
return 0;
}
我收到该程序的以下输出:
1 2 3 4
1 2 3 4 5
最佳答案
在 ++i < 5
,++i
确实是先评价的。我不知道你为什么认为这没有发生。
在 j++ < 5
,表达式 j++
的值也首先计算,但表达式的值是预先递增的值(并且增量实际上可能会稍后发生,但这是另一个故事)。 j++
很像 (++j - 1)
.
关于c - C 中关系运算符的前缀与后缀。运算符结合性如何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52885350/