c - 为什么 i+++ 工作正常但+++i 给出错误?

标签 c operators post-increment pre-increment

我试过一些C语言的代码,但我遇到了这个问题。

int i=0;
i=i+++ ++i;   //works fine
//i=i++ +++i;   gives error

我的困惑是 i+++ 是如何运行的?但是 +++i 返回错误。

最佳答案

C 运算符根据“最长匹配”规则进行解析。您的第一个示例被解析为:

i = i ++ + ++ i ;

i = (i++) + (++i);

而您的第二个示例被解析为:

i = i ++ ++ + i ;

i = ((i++)++) + i;

后递增运算符的结果是一个右值,即被递增的变量先前值的副本。将另一个后递增运算符应用于右值是错误的,因为该运算符需要一个左值,直观地说,一个表达式,例如 i*p可以分配给。

此外,此代码包含未定义的行为。您正在读取 i 并在没有干预的情况下修改它序列点;, &&, || ?:——这意味着程序行为是不可预测的,并且会因编译器而异。

关于c - 为什么 i+++ 工作正常但+++i 给出错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24918397/

相关文章:

c - 指令执行两次

c - 我想获取用户输入并返回每个字符串的第一个字母

javascript - 如果两个元素具有相同的类,则在 jquery 中使用运算符返回 true

c - 请解释这个的输出

c - 多次后或前增量后的变量值

c++ - 为什么++(后增量运算符)不能是左值?

c - 链接实际上是如何在内部发生的?

c - 使用 Horner 方法求多项式导数的函数错误在哪里?

c++ - STL - 赋值运算符与 `assign` 成员函数

c# - for循环中的前缀和后缀递增