单选题-2,原题如下:

设有定义“int a=1, b=2, c=3, d=4, m=2, n=2;”, 则执行表达式“(m=a>b)&&(n=c>d)”后,n的值为()。
A. 1
B. 2
C. 3
D. 0

错误答案:D
错因:受到VB语言的影响,以及知识点的遗忘。

短路运算符

《C Primer Plus》曾经说过:“C保证逻辑表达式的求值顺序是从左往右。&&和||运算符都是序列点,所以程序在从一个运算对象执行到下一个运算对象之前,所有的副作用都会生效。而且,C 保证一旦发现某个元素让整个表达式无效,便立即停止求值。”

意思是,对于a && (b-c)这个逻辑表达式,如果a为False,则整体必定为False,不必再对(b-c)进行求值。
对于a || (b-c)亦然,如果a为True,整体必为True,不必理会(b-c)

回到原题,(m=a>b)计算得False,则整体必为False,后续(n=c>d)不再参与计算。故n为原值,即n=2,选C。