后增量和前增量算子

时间:2015-11-02 21:57:34

标签: c increment operator-precedence post-increment pre-increment

请解释一下此代码的结果。

//代码a 当我在笔记本电脑上运行此代码时,y的值为4.我认为,y的逻辑值应为5,因为通过执行x ++它应该返回2而不增加,因为它是后增量然后当我们添加x时,它现在包含根据我的说法,增加的值即3.所以2 + 3是5。但根据我的turbo c ++ 3.0,答案是4。

#include <stdio.h>

void main()

{

    int x = 2,y;

    **int y = x++ + x;**         // ans 4

    printf("y is :%d", y);
}

//代码B. 当我运行这段代码时,答案是6.这里的turbo c ++ 3.0 in ++ x正在增加x ++的递增值,这与上面提到的代码相反。从逻辑上讲,这里的答案是正确的但在上面的代码中却没有  #include

void main()

{

    int x = 2,y;

    **int y = x++ + ++x;**       //and 6

    printf("y is :%d", y);
}

2 个答案:

答案 0 :(得分:0)

  1. 结果为4的第一个程序

    #include <stdio.h>
    
    void main()   {
     int x = 2,y;
     **int y = x++ + x;         // x=2, so y=2+2=4
     printf("y is :%d", y); // after post increment x=3
    }
    
  2. 由于变量仅在语句执行完成后才获得增量值,因此y = 2 + 2

    1. 结果为6的第二个程序。

      ++运算符的相关性是“从右到左”

      void main()   {
         int x = 2,y;
         **int y = x++ + ++x;   //Since associativity is left to right so y=3+3=6
         printf("y is :%d", y);// after the post increment x=4
      }
      
    2. 这里首先执行预增量,因为相关性规则因此y = 3 + 3

答案 1 :(得分:0)

首先,=的赋值运算符从右到左工作,这意味着如果编写x = 2 + 4 + 1;,编译器就会从最右边的数字1开始读取它,然后添加{{ 1}}等等,然后将该值分配给4

因此,在你的case语句中x编译器从右边开始看到它y = x++ + x;x然后看2x++ }因为它是后增量运算符,最后它会添加它们并将2指定为y 2 + 2

在第二种情况下,即4,编译器首先查看y = x++ + ++x;,因为它是预增量运算符,它会增加++x一个,即x现在x。之后看到3并且如上所述,因为它是post运算符,在此操作中它将被视为x++,并且该值为x(请记住我们增加了3之前,编译器将x3 + 3分配给6