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

时间:2018-07-26 15:07:30

标签: c operators

请帮助我解释代码的输出。目前,我是C语言的业余爱好者。如果sort_indexi++是相同的东西,那么为什么输出会如此不同?

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 个答案:

答案 0 :(得分:2)

要了解输出背后的逻辑,您需要对Pointer及其工作原理有所了解。

C语言表现出未定义的行为(https://en.wikipedia.org/wiki/Undefined_behavior),在该行为中您无法预测语法在执行中的工作方式。

i ++->使i递增,但返回i的先前值。 ++ i->使i递增,并在赋值后返回i的新值。 i = i + 1->将i加1,将其写入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 20。

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

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

希望您现在了解i ++和i = i + 1之间的区别。