请帮助我解释代码的输出。目前,我是C语言的业余爱好者。如果sort_index
和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;
}
答案 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之间的区别。