C语言运算符的优先级

        在学习或者使用C语言时,准确辨别运算符的优先级大小,对能否编写和运行正确的程序至关重要。相信,不管是初学者还是程序老兵,都在C语言运算符的优先级问题上栽倒过。下面贴出C语言运算符优先级的排序表。(参考:cppreference.com

        

从上面的优先级排序表可以看出,优先级最高的是数组下标、函数调用操作符、结构体成员选择符。在一些复杂的开源程序中,可以看到一些代码块,例如*p->pdata++,这种写法等价于(1)先取结构体的成员值,即p->pdata,(2)然后再自增自减,(p->pdata)++,(3)最后再进行取值运算*((p->pdata)++)。

易错项分析

       1、*P.num :“.” 的优先级(1)高于 “*” 的优先级(2),故含义是:*(P.num)   对P取num的偏移,然后对num进行解引用操作;易错:(*P).num   对P进行解引用,然后取该对象的num字段。

      2、int *array [ ] :"[ ]" 的优先级(1)高于 “*” 的优先级(2),故含义是:int * (array [ ])  array是个数组,数据由int指针组成;易错:int (*array) [ ]   array是个指向int数组的指针。

      3、int * func( ) :“( )” 的优先级(1)高于 “*” 的优先级(2),故含义是:int *(func( ))   func是个返回int指针的函数;易错:int (*func) ( )   func是个函数指针,其指向的函数返回值为int类型。

      4、( num & mask != 0 ) :“!=” 的优先级(7)高于 “&” 的优先级(8),故含义是:( num & (mask != 0) );  易错:( (num & mask) != 0 ) 。

      5、( result = func() != 0 ) :因为 “!=” 的优先级(7)高于 "=" 的优先级(14),故含义是:( result = (func() != 0) ) ;易错:( (result = func()) != 0 ) 。

      6、num << 5 + result :因为算数运算符的优先级高于移位运算符,故含义是:num << (5 + result) ;易错:(num << 5) + result。

      7、num = 3 , 5 :虽然逗号运算符的值是最右边操作数的值,但是逗号运算符的优先级最低,这里 “=” 的优先级较高,故含义是:(num = 3) , 5;易错: num = ( 3, 5 ) 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值