分享

C语言入门教程-运算符优先级

 ldjsld 2016-07-31

运算符优先级

C语言有丰富的运算符。如果不清楚这些运算符的优先级,则在同时使用多个运算符时就容易产生混乱。

x=5+3*6;

上面的表达式中,x被赋值23,而不是48,因为在C中乘除法的优先级高于加减法。

char *a[10];

这里的a是一个指向大小为10的字符数组的指针,还是一个包含10个字符指针的数组呢?答案只有从C的优先级约定中寻找。类似的,在前面我们看到,*p.i= 10;这条语句由于算符优先级错误而不能执行,而必须用(*p).i=10;强制其使用正确的优先级。

下表摘自Kernighan 和 Ritchie合著的《C程序设计语言》,运算符的优先等级从高到低排列。


运算符                                     结合性
( [ - .                                    自左向右
! - ++  -{-  + *  &  (类型)  sizeof        自右向左
(上行中的 +、-、* 都为单目算符)
*  / %                                     自左向右
+  -                                       自左向右
<<  >>                                     自左向右
<  <=  >  >=                               自左向右
==  !=                                     自左向右
&                                          自左向右
^                                          自左向右
|                                          自左向右
&&                                         自左向右
||                                         自左向右
?:                                         自左向右
=  +=  -=  *=  /=  %=  &=  ^=  |=  <<= >>= 自右向左
,                                          自左向右

由上表可知,char *a[10];声明了一个包含10个字符指针的数组。还可以知道为什么正确处理表达式(*p).i时括号是必不可少的。通过一定的练习您可以记住表格的大部分内容,但某个被疏忽的优先级错误还是会不时制造一些麻烦。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多