c - C 中关系运算符的前缀与后缀。运算符结合性如何影响?

标签 c

根据结合性规则,++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/

相关文章:

c - 如何正确访问此结构中的指针?

c - 在C中写入结构双向链表中的字符串

c - 相同值的不同 Int 值?

c - 将数组中的 2 个连续整数计算为字符

c - int a, f() {} 应该编译吗?

c - Postgresql C 如何将 uint64_t 转换为数字?

c - 在AVR studio中将温度转换为电压

c - 动态数组重新分配

c - 在这种情况下如何不重复自己?相同但参数不同的 C 函数

使用 C unix 命令或 C 更改文件中的特定单词