混淆 i++ 和 i=i+1

Confusion with i++ and i=i+1

请帮我解释我的代码输出。目前我是 C 的业余爱好者。如果 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,但 returns i 的先前值。 ++i-> 递增 i,returns 赋值后 i 的新值。 i = i + 1 -> i 加 1,写入 i,然后 returns 赋值后 i 的新值

请参阅此 link 了解更多信息:https://en.wikipedia.org/wiki/Sequence_point

基于这个原理,输出可以分析如下。

int i=0;
printf("%d %d %d \n",i++,i,i++);

首先,i=0 它从右侧 i++ 开始执行 首先,它赋值&指针存储0;然后增量将发生。所以,i=1.

下一步,只有一个变量。因此,指针不存储值;它只存储地址。因此,i=1。

最后一步执行与第一步相同。所以,i=2。

现在,它将打印存储的值。所以,输出是 1 2 0。

现在,让我们分析第二个输出。

在第二个输出中,表达式为j=j+1。 因此,首先,它执行所有步骤,然后打印值。 所以,第二个输出是 2 2 2。

我希望你现在知道 i++ 和 i=i+1 之间的区别了。