• 运算符


    2.复合运算符

    (1)i+=1和i=i+1的区别:前者是i的值只计算一次,而后者i的值会计算两次。

    例:a[foo()]+=1和a[foo()]=a[foo()]+1,如果foo()函数打印一条消息,那么前者只会打印一次,而后者会打印两次消息。

    (2)逗号运算符:先求左边的值,求完值后把值丢掉,右边作为整个表达式的值

    函数的实参也是使用逗号分开参数,但是也可以写成: f (a,(t=2,t+3),c) ,第二个参数里面使用了逗号运算符。

    (3)sizeof 和typedef

    sizeof: 返回类型是size_t(无符号整型),注意size_t在不同的平台是不同的类型,有些平台是unsigned long long类型

    用法:

             1.sizeof 表达式

             2.sizeof(类型)

    typedef:类型定义或者通俗的说给类型起别名

    例:typedef  unsigned long size_t,那么size_t就是unsigned long类型

    3.Side Effect和Sequence Point

    a=(++a)+(++a)+(++a)+(++a)   最后a的值是undefined

    Sequence :调用一个了函数可能产品Side Effect,或者++=,—= 这样的复合运算符也可能产生Side Effect.

    Side Effect的计算顺序无法确定。

    在库函数返回时是Sequence Point.

    逻辑与(&&)和逻辑或(||):求值顺序:先求左值,右值可能不会计算或者说求值。

    1.在两个Sequence Poine之间的多个Side Effect的顺序不确定,那么在之间的变量允许被改变一次。

    2.同时在两个Sequence Point之间既要读一个变量的值又要改它的值,只有在读写顺序确定的情况下才可以这么写,比如a[i++]=i和i=i+1,前者的顺序无法确定,后者的计算顺序是确定的。

    例: a=(++a)+(++a)+(++a)+(++a)   最后a的值是undefined

  • 相关阅读:
    Daemon Tools手工完全卸载方案
    不要轻易删除/windows/install下文件
    Dumpbin命令的使用
    v4l2 视频捕获
    2瓶4两酒,1个1.5两的酒杯
    n个平面分空间最多可分成多少份
    &#65279导致页面顶部空白一行解决方法
    Base64编码原理分析
    浏览器中“JavaScript解析器”工作原理
    IList转化为DataSet,解决了System.nullable()的问题
  • 原文地址:https://www.cnblogs.com/yangbingqi/p/3337869.html
Copyright © 2020-2023  润新知