69,371
社区成员
发帖
与我相关
我的任务
分享
#include<stdio.h>
void main()
{
int a=10,b=20,c=30,d=40,e=50,f=60,g=70,h=80;
h=++a<++b?++c<++d?++e:++f:++g;
printf("a=%d, b=%d, c=%d, d=%d, e=%d, f=%d, g=%d, h=%d\n",a,b,c,d,e,f,g,h);
}
a=11, b=21, c=31, d=41, e=51, f=60, g=70, h=51
请按任意键继续. . .
a ? b : c ? d : e
a ? b ? c : d : e
分别等同于
a ? b : (c ? d : e)
a ? (b ? c : d) : e
要理解这样做的原理,只需要掌握两个原则:
1,从右边开始往左找,直至遇到第一个未被处理的“?”;
2,再从这个“?”开始往右找第一个遇到的“:”;
3,在“?”左边的操作数前加一个“(”,在“:”右边的操作数后加一个“)”;
4,返回1,继续处理其它条件运算符?:。
++ a < ++ b ? ++ c < ++ d ? ++ e : ++ f : ++ g;
equ.:
++ a < ++ b ? (++ c < ++ d ? ++ e : ++ f) : ++ g;
int a = 0, b = 1, c = 2, x = 3, y = 4, z = 5;
则,
a ? b : x ? y : z
等同于
a ? b : (x ? y : z)
这是因为,要先找到最右边的?,让它与旁边的操作数结合,而它后面最近的冒号也属于它的同类。而
a ? x ? y : z : b
等同于
a ? (x ? y : z) : b
原因同上。