混淆 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 之间的区别了。
请帮我解释我的代码输出。目前我是 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 之间的区别了。