C语言中,a=b=c,a=b==c,a==(b=c),a==(b==c)有什么区别
首先谢谢楼主,这个问题真好!我刚才的回答错了,现在删了重答,不过执行的结果还是3,1,0,0 这个我实际操作过了。首先=和==的意思楼上各位已经说的很清楚了,一个是赋值,一个是判断,==的优先级高于=,==两边的值若相等,则判断为真,整个表达式的值为1,否则为0。这是前提,下面来看这个问题。刚才我的错误在误以为printf函数是自左向右执行,就像我们的书写习惯一样,不过实际不是。由于printf执行参数输出时是压栈操作(为了支持不定个数的参数的输出,故从后向前执行),所以会先对最后一个进行操作,也就是从右向左输出(脸红,老师貌似也讲过,不过。。。悔不该当初啊)。所以整个printf执行步骤如下:第一步是最后一个a==(b==c),b是2,c是3,明显不等,所以b==c的值是0,然后a是1,和0又不等,所以整个式子值为0;第二步为倒数第二个,a==(b=c),先将c赋给b,此时b和c都为3,再判断a与b是否相等,a为1,不等,整个式子为0;第三步:a=b==c,经过上一步,此时b和c都为3,所以判断b==c为真,值为1,然后将1赋给a,输出a,就是1;第四步:a=b=c,自右向左,先将c值赋给b,再将b值赋给a,输出a,即为3,结果3,1,0,0。这个题目告诉我们上课一定要认真听讲(再次脸红)。累死我了。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!