[英]Confusion with i++ and i=i+1
请帮助我解释代码的输出。 目前,我是C i++
的业余爱好者。如果i++
和i=i+1
是相同的东西,那么为什么输出会如此不同?
#include <stdio.h>
void main()
{
int i=0;
printf("%d %d %d \n",i++,i,i++);
int j=0;
printf("%d %d %d \n",j=j+1,j,j=j+1);
return 0;
}
输出:
1 2 0
2 2 2
Process returned 7 (0x7) execution time : 0.081 s
Press any key to continue.
要了解输出背后的逻辑,您需要了解Pointer及其工作原理。
C语言表现出未定义的行为( https://en.wikipedia.org/wiki/Undefined_behavior ),您无法在其中预测语法在执行中的工作方式。
i ++->使i递增,但返回i的先前值。 ++ i->使i递增,并在赋值后返回i的新值。 i = i + 1->将1加到i,将其写入i,然后在分配后返回i的新值。
请参阅此链接以获取更多信息: https : //en.wikipedia.org/wiki/Sequence_point
基于此原理,可以对输出进行如下分析。
int i=0;
printf("%d %d %d \n",i++,i,i++);
首先,i = 0,它从右侧开始执行i ++。首先,它给值赋值并且指针存储0。 那么增量将发生。 所以,我= 1。
在下一步中,只有一个变量。 因此,指针不存储值。 它只存储地址。 因此,i = 1。
最后一步的执行与第一步相同。 所以,我= 2。
现在,它将打印存储的值。 因此,输出为1 2 0。
现在,让我们分析第二个输出。
在第二个输出中,表达式为j = j + 1。 因此,首先,它执行所有步骤,然后打印该值。 因此,第二个输出是2 2 2。
希望您现在了解i ++和i = i + 1之间的区别。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.