#include <stdio.h>
int main()
{
int x=100;
x=x++;
printf("x : %d\n",x); //prints 101
return 0;
}
输出101的原因是什么?我认为输出应该是100。
答案 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++
的工作原理如下:
在C ++中它看起来像这样:
int PostIncrement(int& x)
{
int y = x;
x = x + 1;
return y;
}
运算符优先级不会以这种方式丢失,并且在增量之后完成赋值。