为什么i++
和++i
在以下代码中相同?
#include <stdio.h>
int main()
{
int i=5;
while(1)
{
i++; /*replacing i++ by ++i also gives 6*/
printf("%d",i);
break;
}
return 0;
}
输出为6.我了解到增量运算符i++
的值为i的当前值,并使i
的存储值递增。但i's
值为虽然i的当前值为5,但显示为6.虽然i++
替换++i
也会得到相同的值6.为什么i++
和++i
在这种情况下相同且为什么虽然初始值为5,但输出为6。
答案 0 :(得分:10)
执行顺序是顺序的。
i++
或者就此而言++i
是在该序列点执行的单条指令,i
的值不在任何地方使用那条指令,所以它并不重要。
如果您将printf("%d",i);
替换为printf("%d",i++);
或printf("%d",++i);
,则会有很大不同。
编辑:我还发现了一些非常有用的东西。在C
和C++
中,前缀一元运算符返回lvalue
,与后缀一元运算符形成对比,因此,如果您想要,例如,减少i
两次,那么
(i--)--; // is illegal
,而
(--i)--; // is perfectly legal and works as intended.
答案 1 :(得分:1)
查看我在What is the difference between ++i and i++?
找到的答案“++我将增加i的值,然后返回递增的值。”
“i ++将增加i的值,但返回我在增加之前保持的原始值。”
您不使用它返回的值,因此在您的情况下无关紧要。
答案 2 :(得分:1)
它仅更改在方法中使用时将设置的值。
使用i++
你将在方法中使用i,一旦完成,我将会增加。
首先使用++I
增加值,然后在方法中使用它。
答案 3 :(得分:1)
i++
- 在i中添加1会返回旧值。
++i
- 向i添加1,返回新值。
在您的情况下:
i++
- 返回5并将{1}} i
加1作为6.如果你抓住了
返回值i
您可以获得清晰的想法。因为return的值为5。
i++
- 向++i
添加1并将i
设为6,然后返回i
= 6
示例代码:
i
输出:
#include <stdio.h>
int main()
{
int i=5;
while(1)
{
int post, pre;
post = i++;
printf("post : %d, i: %d\n", post, i);
i = 5;
pre = ++i;
printf("pre : %d, i: %d\n", pre, i);
break;
}
return 0;
}
答案 4 :(得分:0)
int i = 5;
i++; // implies i = i + 1 ==> 6
// Even ++i results the same
printf("%d",i); // Obviously it prints 6
答案 5 :(得分:0)
如果您没有将返回值分配给变量或将其用作参数,则结果完全相同。
两者之间的主要区别在于++ i增加变量并且只分配值,而i ++首先分配,然后增加。