电脑爱好者,提供IT资讯信息及各类编程知识文章介绍,欢迎大家来本站学习电脑知识。 最近更新 | 联系我们 RSS订阅本站最新文章
电脑爱好者
站内搜索: 
当前位置:首页>> c语言>>C语言专题——运算符、优先级和结合性:

C语言专题——运算符、优先级和结合性

来源:www.cncfan.com | 2006-4-28 | (有7706人读过)

有些运算符的优先级是错误的。
“当按照常规方式使用时,可能引起误会的任何运算符”就是存在错误优先级的运算符。

.的优先级高于*。->操作符用于消除这个问题。
*p.f变成了*(p.f)而不是(*p).f

[]高于*,于是int *ap[]中的ap变成了元素为int指针的数组。

函数()高于*,因此,int *fp()不再是函数指针了,而是一个函数,返回int *。

逗号运算符在所有运算符中优先级最低,所以,i = 1, 2就成了(i = 1), 2而不是i = (1, 2)。
逗号运算符的值是最右边操作数的值,逗号运算符结合性从左至右,因此又称为顺序求值运算符。

在表达式中如果有布尔操作、算术运算、位操作等混合计算,始终应该在适当的地方加上括号。

x = f() + g() * h();
乘法先于加法执行,但是g()和h()的调用可能以任何顺序出现。
同样,f()可能在乘法之前调用,也可能在乘法之后调用。

优先级和结合性规则告诉你哪些符号组成一个意群,
大部分这样的意群内部如何进行计算的次序是未定义的。

有些操作符,如&&和||等,其操作数的计算顺序是确定的,它们使用短路原则。

C语言中记住两个优先级就够了:乘法和除法先于加法和减法,在涉及其他操作符时一律加上括号。

结合性用于在几个操作符具有相同的优先级时确定先执行哪一个。
每个操作符拥有某一级别的优先级,同时也拥有左结合性或者右结合性。

所有的赋值符(包括复合赋值符)都具有右结合性(从右到左执行),因此可以使用连等的赋值形式。
唯一的三目运算符?:也是具有右结合性的。

所有优先级相同的操作符,它们的结合性也相同,这是必须如此的。

在函数调用中,各个参数的计算顺序是不确定的。


source: 《Expert C Programming》&《C Traps and Pitfalls》
c语言热门文章排行
网站赞助商
购买此位置

 

关于我们 | 网站地图 | 文档一览 | 友情链接| 联系我们

Copyright © 2003-2024 电脑爱好者 版权所有 备案号:鲁ICP备09059398号