协慌网

登录 贡献 社区

++ i 和 i ++ 有什么区别?

在 C 中,使用++ii++之间有什么区别,哪个应该在for循环的增量块中使用?

答案

  • ++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++ ”,你就不会出错。

关于++ii++的效率有++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 = 1i = 2 。这里i值将首先分配给j然后i将增加。

++i

++i是预增量,因为它在操作之前将i的值增加 1。这意味着j = i;将在i++之后执行。

让我们看看以下示例:

int i = 1, j;
j = ++i;

这里j = 2但是i = 2 。这里的价值i将被分配到ji的 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

请不要担心哪一个更快的 “效率”(速度,真的)。这些天我们有编译器来处理这些事情。使用任何有意义的使用,在此基础上更清楚地显示您的意图。