以下程序的输出是什么?
#include
int main()
{
int a = 1;
int b = 1;
int c = a || --b;
int d = a-- && --b;
printf("a = %d, b = %d, c = %d, d = %d", a, b, c, d);
return 0;
}
(A) a = 0,b = 1,c = 1,d = 0
(B) a = 0,b = 0,c = 1,d = 0
(C) a = 1,b = 1,c = 1,d = 1
(D) a = 0,b = 0,c = 0,d = 0答案: (B)
说明:让我们逐行了解执行情况。
a和b的初始值为1。
// Since a is 1, the expression --b
// is not executed because
// of the short-circuit property
// of logical or operator
// So c becomes 1, a and b remain 1
int c = a || --b;
// The post decrement operator --
// returns the old value in current expression
// and then updates the value. So the
// value of expression a-- is 1. Since the
// first operand of logical and is 1,
// shortcircuiting doesn't happen here. So
// the expression --b is executed and --b
// returns 0 because it is pre-increment.
// The values of a and b become 0, and
// the value of d also becomes 0.
int d = a-- && --b;
这个问题的测验