x = x ++的影响是什么?

时间:2013-05-14 16:25:00

标签: c

#include <stdio.h>

int main()
{
  int x=100;
  x=x++;
  printf("x : %d\n",x); //prints 101
  return 0;
}

输出101的原因是什么?我认为输出应该是100。

7 个答案:

答案 0 :(得分:5)

由于Undefined Behaviour,这是Sequence Points

  

在连续的“序列点”之间,对象的值可以是   仅通过表达式

修改一次

上一个epxression x=100;的结尾是一个序列点,x=x++;的结尾是另一个序列点。

基本上,你的表达式没有中间'序列点',但你要修改X的值两次。结果是未定义的行为:基本上,任何都可能发生:你可以获得100,101或42 ......

答案 1 :(得分:4)

以下是我认为您正在寻找的内容:

int main(){
    int x=100;
    printf("x : %d\n",x++); // Will print 100 and then increment x
    return 0;
}

答案 2 :(得分:1)

您在打印之前递增x - 因此这就是输出101的原因。

您正在执行与x = x; x++;

相同的操作

答案 3 :(得分:0)

在将x分配给x之后,您有效地增加了x=x++

(assign x to x prior to increment) then (increment x)实际上变为x = x; ++x; // Increment after the assignment

这将产生与写下:

相同的效果
x=x++;

这应该在{{1}}行之后将x保留为101。

答案 4 :(得分:0)

您正在增加您正在打印的x - 此处无论是后期还是预增量都无关紧要。

x=x++会产生与x=++x相同的结果。

如果您想为其指定另一个对象,请执行以下操作:

#include<stdio.h>

int main(){
        int x=100;
        int y=x++;
        printf("y : %d\n",y); //prints 100
        printf("x : %d\n",x); //prints 101
        return 0;
}

答案 5 :(得分:0)

这就是发生的事情

#include <stdio.h>

int main()
{
  int x=100;
  x=x++; // This is original code however I have rewritten this as below 
  x=x;
  x++;
  printf("x : %d\n",x); //prints 101
  return 0;
}

你可以看到

x=x++;

可以改写为

x=x;
x++;

因此结果没有惊喜......

答案 6 :(得分:0)

效果是x的值不会改变。

x++的工作原理如下:

  1. 参考该值。
  2. 分配一个新整数并将值存储到其中。
  3. 增加参考。
  4. 返回临时整数。
  5. 在C ++中它看起来像这样:

    int PostIncrement(int& x)
    {
        int y = x;
        x = x + 1;
        return y;
    }
    

    运算符优先级不会以这种方式丢失,并且在增量之后完成赋值。