++i
将递增的值i
,然后返回增加后的值。
i = 1;
j = ++i;
(i is 2, j is 2)
i++
将增加的价值i
,而是返回原来的价值i
递增之前举行。
i = 1;
j = i++;
(i is 2, j is 1)
对于for
循环,要么适用。 ++i
似乎更常见,也许是因为这是K&R 中使用的 。
在任何情况下,遵循指南 “prefer ++i
over i++
”,你就不会出错。
关于++i
和i++
的效率有++i
评论。在任何非学生项目编译器中,都没有性能差异。您可以通过查看生成的代码来验证这一点,这些代码是相同的。
效率问题很有意思...... 这是我尝试回答的问题: 在 C 中 i ++ 和 ++ i 之间是否存在性能差异?
正如On Freund所说,对于 C ++ 对象来说它是不同的,因为operator++()
是一个函数,编译器无法知道如何优化临时对象的创建来保存中间值。
i ++被称为Post Increment,而++ i被称为Pre Increment。
i++
i++
是后递增的,因为它在操作结束后将i
的值递增 1。
让我们看看以下示例:
int i = 1, j;
j = i++;
这里j = 1
但i = 2
。这里i
值将首先分配给j
然后i
将增加。
++i
++i
是预增量,因为它在操作之前将i
的值增加 1。这意味着j = i;
将在i++
之后执行。
让我们看看以下示例:
int i = 1, j;
j = ++i;
这里j = 2
但是i = 2
。这里的价值i
将被分配到j
后i
的 incremention i
。类似地, ++i
将在j=i;
之前执行j=i;
。
对于你应该在 for 循环的增量块中使用的问题?答案是,你可以使用任何一个.. 没关系。它将执行你的 for 循环相同的 no。时间。
for(i=0; i<5; i++)
printf("%d ",i);
和
for(i=0; i<5; ++i)
printf("%d ",i);
两个循环都会产生相同的输出。即0 1 2 3 4
。
它只在你使用它的地方很重要。
for(i = 0; i<5;)
printf("%d ",++i);
在这种情况下,输出将是1 2 3 4 5
。
请不要担心哪一个更快的 “效率”(速度,真的)。这些天我们有编译器来处理这些事情。使用任何有意义的使用,在此基础上更清楚地显示您的意图。