输出以下C程序
发布时间:2020-12-16 10:31:22 所属栏目:百科 来源:网络整理
导读:这个C程序的输出应该是什么? #includestdio.hint main(){ int x,y,z; x=y=z=1; z = ++x || ++y ++z; printf("x=%d y=%d z=%dn",x,z); return 0;} 给定的输出是: x = 2 y = 1 z = 1 我理解x的输出,但是没有看到y和z值如何不增加. 解决方法 这是 short-circ
这个C程序的输出应该是什么?
#include<stdio.h> int main(){ int x,y,z; x=y=z=1; z = ++x || ++y && ++z; printf("x=%d y=%d z=%dn",x,z); return 0; } 给定的输出是: 解决方法
这是
short-circuit evaluation的结果.
表达式x的计算结果为2,编译器知道2 ||无论什么都有,任何东西总是评估为1(“真实”).因此,它不会进行任何评估,y和z的值也不会改变. 如果你尝试 x=-1; y=z=1; 您将看到y和z将递增,因为编译器必须评估OR的右侧以确定表达式的结果. 编辑:asaerl先在评论中回答了你的后续问题,所以我会稍微扩展他的正确答案. 运算符优先级确定组成表达式的部分如何绑定在一起.因为AND的优先级高于OR,所以编译器知道你写了 ++x || (++y && ++z) 代替 (++x || ++y) && ++z 这使得它的任务是在x和y&&之间进行OR. ?.此时,通常可以自由选择是否“首选”首先评估一个或另一个表达式 – 按照标??准 – 并且通常不能依赖于特定的顺序.此顺序与运算符优先级无关. 但是,特别针对||和&&标准要求评估将始终从左到右进行,以便短路可以工作,如果评估lhs的结果告诉,开发人员可以依赖于未评估的rhs表达式. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |