我试过一些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/