2015-11-02 141 views
-14

请向我解释此代码的结果。后增量和增量前置运算符

//代码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。这里涡轮C++ ++在x被拾取x的递增的值++ 3.0,这与上述代码相反。逻辑上来说,答案是正确的,但在上面的代码中没有。 的#include

void main() 

{ 

    int x = 2,y; 

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

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

你运行它并找出?你是否运行它我是一个调试器?什么让你困惑? – abligh

+0

分配这个练习的老师的重点是让你通过研究操作员顺序和优先级的规则自行计算出来。让我们向你解释它会击败目标。 – Barmar

+0

请参阅https://en.wikipedia.org/wiki/Comma_o​​perator –

回答

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 + 2

  1. Seco第二程序,其中所述结果是++操作者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 
    } 
    

下面是因为因为这样Y =的关联规则首先进行预增量3 + 3

0

首先,赋值运算符是从右=作品留下,这意味着如果你写x = 2 + 4 + 1;编译器开始从最右边的数字是1阅读它然后将其添加到4它等和T如果它将该值赋予x

所以,在你的case语句y = x++ + x;编译器开始从正确的,是它第一次看到x2然后看到x++即也2,因为它是后增量运算终于添加它们,并分配y2 + 24看到它。

在第二种情况下,即y = x++ + ++x;,编译器首先着眼于++x并且因为它是预增量运算它增加x一个,现在即x3。此后x++看出以上,因为它是交操作者将被视为在该操作x如所述的并且该值是3(记住我们通过一个较早递增x),因此,编译器分配3 + 36y