C语言,关于条件运算符的右结合性。 void main(){ int a=1,b=2,c

C语言,关于条件运算符的右结合性。

void main(){
int a=1,b=2,c=3,d=4,e=5,f;
f=a++?b++:c++?d++:e++; //或者f=a++?b++:(c++?d++:e++);

printf("a=%d,b=%d,c=%d,d=%d,e=%d,f=%d\n",a,b,c,d,e,f);
}
加括号或者不加括号。
输出结果都是a=2,b=3,c=3,d=4,e=5,d=2;
也就是说右边的c++?d++;e++;没有执行。
可是条件运算符不是右结合吗?不是应该先算c++?d++;e++吗

不是这样的,这个是看程序是否有运行到那里,因为(a++)值为真,所以程序直接运行后面的b++,不执行c++?d++;e++,所以结果就是你看到的,如果你是f=0?b++:c++?d++:e++;,,那边程序就执行后面的,而不执行b++,结果就是a=1,b=2,c=4,d=5,e=5,d=4;追问

那所谓的右结合性是怎么体现的呢?

追答

体现在程序把c++?d++:e++看成了一个整体,更加具体一些就是编辑器面对
f=a++?b++:c++?d++:e++;的时候,把它理解成为了

f=a++?b++:(c++?d++:e++);

而不是f=(a++?b++:c++)?d++:e++;

这就是它的右结合性

温馨提示:答案为网友推荐,仅供参考

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网