#include <stdio.h>
int main()
{
int a ,m=10,n=9;
a=(--m==n++)?
--m:++n;
printf("%d\n",a);
return 0;
}
举个例子:
x>y ? x:y; 这个语句的意思就是比较x,y的大小,如果语句正确返回x,否则返回y.
题目中 a=(--m=n++)? --m:++n; 意思也是一样,判断--m是否与n++的值相等,相等返回--m,否则返回++n,--m先执行--即等于9,n++先执行n=9再算++,所以等式成立都等于9,返回--m,--在前先执行,因为m此前执行了--,值为9,所以再执行--,值就为8了。
没有分号就是一行!!!!
a=(--m=n++)?
--m:++n;
//写作
a = (--m=n++)?(--m):(++n);
//看起来是不是就熟悉了?
//是的 没错 就是问号表达式(又名 三目运算符)
//(条件)?(表达式1):(表达式2)
// 当条件为true返回表达式1 反之返回表达式2
// 需要注意的是 三目运算符中 表达式1 表达式2 返回的值类型必须一致
// 再分析一下题
// 考了运算符优先级问题 首先你要知道 --m 和 m-- 的区别
// 若 m=1 a=(m--) 则 a = 1;
// 若 m=1 a=(--m) 则 a = 0;
// 那么
// 条件表达式 (--m = n++) 可拆分为=> --m; m = n; n++; => m = 9; n=10;条件表达式 = 9
a = (9)?(--m):(++n);
//(c/C++中非零为true)
// 所以执行 表达式1 => --m; m=8
a = 8;