代码之家  ›  专栏  ›  技术社区  ›  msc

为什么postfixed的优先级高于前缀?[副本]

  •  0
  • msc  · 技术社区  · 8 年前

    案例1:

    int i = 10;
    int j = i++;
    

    这里,首先将i的值分配给j,然后将i增加1。

    案例2:

    int i = 10;
    int j = ++i;
    

    这里,第一个i增加1,然后分配给j。

    那么,如果增量操作首先以前缀形式完成,那么为什么postfixed的优先级高于前缀?

    2 回复  |  直到 8 年前
        1
  •  2
  •   user2736738    8 年前

    这与优先级无关。(此处)在预增量中,分配的值是副作用发生之前的值。 对于预增量,它将是副作用后的值。

    int i = 10;
    int j = i++;
    

    i 是10。所以 j=10 执行这两条语句之后。

    int i = 10;
    int j = ++i;
    

    这里的值为11。因为增量先完成,然后分配。

        2
  •  0
  •   Achal    8 年前

    Linux操作系统 manual 第页,共页 operator 定义为 same priority 对于前置/后置 increment .

    ! ~ ++ -- + - (type) * & sizeof      right to left
    

    先分配增量后规则,然后再分配增量

    int j = i++;// here first whatever i value is there that will be assigned to j
    

    预增量规则是先增量,然后分配

    int j = ++i;//++i itself will change i value & then modfied value will assign to j.
    

    例如,考虑以下示例

    #include<stdio.h>
    int main()
    {
            int x = 10;
            int *p = &x;// assume p holds 0x100
            printf("x = %d *p = %d p = %p\n",x,*p,p);
            ++*p++;
            /** in above statement ++ and * having same precedence,then you should check assocaitivity which is R to L
              So start solving from Right to Left, whichever operator came first , solve that one first 
              first *p++ came , again solve p++ first, which is post increment,so address will be same 
             *0x100  means = 10
             now ++10 means = 11
             **/
            printf("x = %d *p = %d p = %p\n",x,*p,p);
    }
    
    推荐文章