zoukankan      html  css  js  c++  java
  • C++运算符详解问题详解

    有关C++运算符的细节,先来看一个题目:

    int main()
    {
        int a[] = {2, 4, 6, 8, 10}, *p, **k;
        p = a;
        k = &p;
        printf(" % d", *(p++));
        printf(" % d
    ", **k);   
        return 0;
    }
    

      首先看一下内存模型:

    p内存里的内容,随着p++改变,所以p就能指向不同的数组单元。所以通过**k访问到的数据会随着p++的更新改变。

    说完了模型,再说运算符的优先级问题,*和++运算符的优先级是相同的,结合的方式是从右向左,所以*p(++)和*p++是一样的。但是因为++在p之后,所以会先用p的值然后再++操作。所以上面的程序得到的结果就是:

    2 4


    附录:C++运算符表

    优先级

    运算符

    名称或含义

    使用形式

    结合方向

    说明

    1

    []

    数组下标

    数组名[常量表达式]

    左到右

     

    ()

    圆括号

    (表达式)/函数名(形参表)

     

    .

    成员选择(对象)

    对象.成员名

     

    ->

    成员选择(指针)

    对象指针->成员名

     

    2

    -

    负号运算符

    -表达式

    右到左

    单目运算符

    (类型)

    强制类型转换

    (数据类型)表达式

     

    ++

    自增运算符

    ++变量名/变量名++

    单目运算符

    --

    自减运算符

    --变量名/变量名--

    单目运算符

    *

    取值运算符

    *指针变量

    单目运算符

    &

    取地址运算符

    &变量名

    单目运算符

    !

    逻辑非运算符

    !表达式

    单目运算符

    ~

    按位取反运算符

    ~表达式

    单目运算符

    sizeof

    长度运算符

    sizeof(表达式)

     

    3

    /

    表达式/表达式

    左到右

    双目运算符

    *

    表达式*表达式

    双目运算符

    %

    余数(取模)

    整型表达式/整型表达式

    双目运算符

    4

    +

    表达式+表达式

    左到右

    双目运算符

    -

    表达式-表达式

    双目运算符

    5

    <<

    左移

    变量<<表达式

    左到右

    双目运算符

    >>

    右移

    变量>>表达式

    双目运算符

    6

    >

    大于

    表达式>表达式

    左到右

    双目运算符

    >=

    大于等于

    表达式>=表达式

    双目运算符

    <

    小于

    表达式<表达式

    双目运算符

    <=

    小于等于

    表达式<=表达式

    双目运算符

    7

    ==

    等于

    表达式==表达式

    左到右

    双目运算符

    !=

    不等于

    表达式!= 表达式

    双目运算符

    8

    &

    按位与

    表达式&表达式

    左到右

    双目运算符

    9

    ^

    按位异或

    表达式^表达式

    左到右

    双目运算符

    10

    |

    按位或

    表达式|表达式

    左到右

    双目运算符

    11

    &&

    逻辑与

    表达式&&表达式

    左到右

    双目运算符

    12

    ||

    逻辑或

    表达式||表达式

    左到右

    双目运算符

    13

    ?:

    条件运算符

    表达式1? 表达式2: 表达式3

    右到左

    三目运算符

    14

    =

    赋值运算符

    变量=表达式

    右到左

     

    /=

    除后赋值

    变量/=表达式

     

    *=

    乘后赋值

    变量*=表达式

     

    %=

    取模后赋值

    变量%=表达式

     

    +=

    加后赋值

    变量+=表达式

     

    -=

    减后赋值

    变量-=表达式

     

    <<=

    左移后赋值

    变量<<=表达式

     

    >>=

    右移后赋值

    变量>>=表达式

     

    &=

    按位与后赋值

    变量&=表达式

     

    ^=

    按位异或后赋值

    变量^=表达式

     

    |=

    按位或后赋值

    变量|=表达式

     

    15

    ,

    逗号运算符

    表达式,表达式,…

    左到右

    从左向右顺序运算

    同一优先级的运算符,运算次序由结合方向所决定。

  • 相关阅读:
    [BZOJ3829][Poi2014]FarmCraft 贪心
    【BZOJ 3144】 [Hnoi2013]切糕 真·最小割
    【BZOJ1458】士兵占领 最大流的模板题
    【COGS 14】 [网络流24题] 搭配飞行员 网络流板子题
    【BZOJ 4832】 [Lydsy2017年4月月赛] 抵制克苏恩 期望概率dp
    【BZOJ4325】NOIP2015 斗地主 搜索+贪心
    【BZOJ 1409】 Password 数论(扩展欧拉+矩阵快速幂+快速幂)
    【NOIP模拟赛】天神下凡 动态开点线段树
    【NOIP模拟赛】藏宝图 最小生成树
    【NOIP模拟赛】黑红树 期望概率dp
  • 原文地址:https://www.cnblogs.com/stemon/p/4676970.html
Copyright © 2011-2022 走看看