4.执行下列语句后a的值为( ),b的值为( C ). int a, b, c; a=b=c=1; ++a|| ++b &&

inta,b,c;a=b=c=1;++a||++b&&++c;A)错误1B)22C)21D)11求详解!... int a, b, c;
a=b=c=1;
++a|| ++b && ++c;
A) 错误 1     B) 2 2     C) 2 1     D) 1 1
求详解!
展开
 我来答
折心灬小轩
2013-06-19 · TA获得超过543个赞
知道小有建树答主
回答量:259
采纳率:0%
帮助的人:107万
展开全部
||的优先级高,所以++a||++b作为&&的左表达式参加运算
a的值为1,++a的结果为非零,所以||成立,忽略了++b
所以a的值被修改,b的值没有被修改
故a=2,b=1

满意请采纳,不满意请追问
追问
为什么只有a的值被修改,b的没被修改?
追答
因为||对流程有控制性,
如果||的左表达式成立,就不会对他的右表达式进行计算,
在你的例子中,++a的值已经是2,是非零
那么||已经满足(有一个值是真就满足),所以这时就忽略了右表达式的计算

要仔细看看书,这个知识点,书上都会有的
sunweiforfun
2013-06-19
知道答主
回答量:19
采纳率:0%
帮助的人:24.1万
展开全部
    // 定义3个变量a、b、c
    int a, b, c;
    // 给3个变量赋初值,a=1 b=1 c=1
    a=b=c=1;
    // 逻辑与的优先级高于逻辑或,相当于++a || (++b && ++c)
    // 所以先判断++a是否为真,++a,前置自增后a为2,为真
    // 而此时,由于是逻辑或运算,只要有一个为真,结果就为真,已经可以判定这个表达式的值为真
    // 所以,后面括号中的表达式就不会运算,b为1,c为1
    // 这个行为通常称为“短路求值”
    ++a || ++b && ++c;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式