
[英]why this code works fine in c++ if i use cin but it fails when i use scanf in c?
[英]Why i+++ works fine but +++i gives error?
我已经尝试过用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;
后递增运算符的结果是rvalue ,它是已递增变量的先前值的副本。 将另一个后递增运算符应用于rvalue会出错,因为该运算符需要一个lvalue ,直观上讲 ,该表达式可以分配给i
或*p
。
另外,此代码包含未定义的行为。 您正在阅读i
并对其进行修改,而没有插入中间的序列点 - ;
, &&
, ||
, ,
,或?:
哪位意味着程序的行为是不可预测的,将整个编译器有所不同。
这两个语句均产生未定义的行为。 但是,第一个可以正常工作的原因是因为编译器将其解释为(i++)+ ++i;
,而第二行是i++ ++(+i)
,这没有任何意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.