c语言结合性问题

C语言运算符优先级
自行百度即可。
左结合就是从左到右结合,右结合也同理。
大多数运算符结合方向是“自左至右”, 即: 先左后右, 例如a- b+c, b 两侧有- 和+两种运算符的优先级相同, 按先左后右结合方向, b 先与减号结合, 执行a- b 的运算, 再执行加c 的运算。

除了自左至右的结合性外, C 语言有三类运算符参与运算的结合方向是从右至左。即: 单目运算符, 条件运算符, 以及赋值运算符。
?:是条件运算符。

若a 是一个变量, 则++a 或a++和- - a 或a- - 分别称为前置加或后置加运算和前置减或后置减运算, 且++a 或a++等价于a=a+1, - - a 或a- - 等价于a=a- 1, 即都是使该变量的值增加1 或减少1。由此可知, 对一个变量实行前置或后置运算, 其运算结构是相同的, 但当它们与其他运算结合在一个表达式中时, 其运算值就不同了。

这个是个很头疼的问题。

值得注意的是, 前置、后置运算只能用于变量, 不能用于常量和表达式, 且结合方向是从右至左。如当i=6 时, 求- i++的值和i 的值。由于“- ”(负号) “++”为同一个优先级, 故应理解为- (i++), 又因是后置加, 所以先有- i++的值为- 6, 然后i 增值1 为7, 即i=7。

讲到这里,大家应该都明白了吧。说白了,许多操作符的优先级都是相同的。
这时,操作符的结合性就开始发挥作用了。

在表达式中如果有几个优先级相同的操作符
,结合性就起仲裁的作用,由它决定哪个操作符先执行。先执行,可以看做是加上括号。
比如,右结合(从右到左),那就是,把右边的运算用括号先括起来,再与左边的进行计算,这样自然是先执行右边的了。 比如 int a,b=1,c=2; a=b=c; 这里’='的结合性是从右到左。 故a=b=c; 可变为a=(b=c); 即a=2。

部分来自:https://blog.csdn.net/ugfdfgg/article/details/86747357

猜你喜欢

转载自blog.csdn.net/qq_43504939/article/details/89091968
今日推荐