繁体   English   中英

与i ++和i = i + 1混淆

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM