• C语言运算符的优先级表与结合性要点


    表达式
    优先级
    ()(小括号) [](数组下标) .(结构成员) ->(指针型结构成员)
    最高
    !(逻辑非) .(位取反) -(负号) ++(1) --(1) &(变量地址)
     
    *(指针所指内容)  type(函数说明)  sizeof(长度计算
    *()     /()     %(取模
    +()     -(
    <<(位左移)          >>(位右移)
    <(小于)   <=(小于等于)   >(大于)   >=(大于等于)
    ==(等于)       !=(不等于
    &(位与)
    ^(位异或
    |(位或)
    &&(逻辑与)
    ||(逻辑或
    ?:(?表达式
    =    +=   -=(联合操作)
    ,(逗号运算符
    最低

    1. .的优先级高于*。->操作符用于消除这个问题。

           *p.f变成了*(p.f)而不是(*p).f

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

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

    4. 逗号运算符在所有运算符中优先级最低,所以,i = 1, 2就成了(i = 1), 2而不是i = (1, 2)。

           逗号运算符的值是最右边操作数的值,逗号运算符结合性从左至右,因此又称为顺序求值运算符。

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

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

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

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

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

    结合性用于在几个操作符具有相同的优先级时确定先执行哪一个。

    每个操作符拥有某一级别的优先级,同时也拥有左结合性或者右结合性。

    所有的赋值符(包括复合赋值符)都具有结合性(从右到左执行),因此可以使用连等的赋值形式。

    唯一的三目运算符?:也是具有右结合性的。

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

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

  • 相关阅读:
    INVALID_STATE_ERR: DOM Exception 11
    测试用户的网络环境
    CentOS修改IP、DNS、网关
    读《结网》
    命名函数表达式
    JavaScript中的编码函数
    linux下C程序printf没有立即输出的问题及我的Makefile文件
    学习使用vimperator
    thinkpad e40 安装 nvidia显卡驱动之后
    fedora:在命令行下删除文件到回收站
  • 原文地址:https://www.cnblogs.com/awpatp/p/1597034.html
Copyright © 2020-2023  润新知