请问各位大神这个代码怎么理解?

#include
int main()
{
int a = 10;
if (a == a--)
printf("TRUE 1\t");
a = 10;
if (a == --a)
printf("TRUE 2\t");
}

c

4个回答

这代码的结果不确定,这属于c语言的未定义行为。未定义行为是指,代码存在2种以上的理解方式,没有规定这种写法的确切含义是什么,所以不同编译器不同。

http://blog.csdn.net/qq_29169813/article/details/51416281

qq_40528117
qq_40528117 谢谢
接近 2 年之前 回复
#include <ios>
using namespace std;
int main()
{
int a = 10;
if (a == a--)
printf("TRUE 1\t");
a = 10;
if (9 == --a)
printf("TRUE 2\t");
a = 10;
if(a-- == 10)
printf("TRUE 3\t");
a = 10;
if(--a == 10)
printf("TRUE 4\t");
}

运行结果是 “TRUE2   TURE3”
我觉得它是先计算右边式子的值然后在计算左边式子的值 那么
在判断 (a == a--)的时候先计算了右边的式子 a = 10 ,然后a自减 , 判断 9 == 10 
在判断( a == --a )的时候也是先计算右边的式子,但是是先a自减,a == 9 ==> 9 == 9 输出true

图片说明

代码输出应该是TRUE 1,要分清后置自减和前置自减
a == a-- 是先比较,然后a--
a == --a 是先--a,后比较

sinat_27953939
wanghy1995 好吧,我也被这个坑了
接近 2 年之前 回复
qq_40528117
qq_40528117 可是刚才在编译器里编译了一下,输出为"TRUE 2",请问是怎么回事?
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!