++ i和i ++有什么区别?
在C中,使用++i
和i++
什么区别,哪些应该用在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++
”,并且不会出错。
关于++i
和i++
的效率,有几条评论。 在任何非学生项目编译器中,不会有性能差异。 您可以通过查看生成的代码来验证该代码,该代码将完全相同。
效率问题很有趣...这是我的答案:在C中,i ++和++ i之间有性能差异吗?
正如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循环相同的号码。 的时代。
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
。
请不要担心速度更快的“效率”(速度,真的)。 我们现在有编译器负责这些事情。 使用任何一个有意义的使用,基于此更清楚地表明你的意图。
链接地址: http://www.djcxy.com/p/12529.html