for循环中的++i和i++有区别吗?这仅仅是语法问题吗?


当前回答

我很奇怪为什么这么多人把for循环中的增量表达式写成i++。

在for循环中,当第三个组件是一个简单的增量语句时,例如

for (i=0; i<x; i++)  

or

for (i=0; i<x; ++i)   

结果执行没有区别。

其他回答

在某些情况下,++i和i+1可能会给出不同的结果,-i, i - 1等也是如此。

这并不是因为递增和递减操作符的工作方式有缺陷,而是因为新程序员有时会忽略一个小事实。

根据经验,不要在数组的方括号内使用inc/dec。例如,我不会用arr[++ I]来代替arr[I + 1]。虽然两者得到的i值是一样的,但这里我们忽略了一些东西。

如果循环条件基于i的执行值,那么将arr[i + 1]替换为arr[++i]将导致错误。为什么?

假设i = 5,那么arr[i + 1]意味着arr[6],而arr[++i]虽然意味着arr[6],但也会将i的值改变为6,这可能不是我们想要做的事情。我们可能不想改变i的值,但由于一个简单的++/——操作符,我们改变了这个值。

所以在使用++/——操作符时要小心。

我希望我能使我的观点更容易理解。

一个(++i)是前增量,一个(i++)是后增量。区别在于表达式立即返回什么值。

// Psuedocode
int i = 0;
print i++; // Prints 0
print i; // Prints 1
int j = 0;
print ++j; // Prints 1
print j; // Prints 1

编辑:哎呀,完全忽略了循环方面的事情。在for循环中,当它是'step'部分(for(…;…。)),但它也可以在其他情况下发挥作用。

在c#中,在for循环中使用没有区别。

for (int i = 0; i < 10; i++) { Console.WriteLine(i); }

输出和

for (int i = 0; i < 10; ++i) { Console.WriteLine(i); }

正如其他人指出的那样,在一般情况下i++和++i有一个微妙但显著的区别:

int i = 0;
Console.WriteLine(i++);   // Prints 0
int j = 0;
Console.WriteLine(++j);   // Prints 1

i++读取I的值,然后增加它。

++i增加i的值,然后读取它。

问题是:

for循环中的++i和i++有区别吗?

答案是:不。

为什么每个答案都必须详细解释前增量和后增量,而这个问题甚至都没有问过?

这样的循环:

for (int i = 0; // Initialization
     i < 5;     // Condition
     i++)       // Increment
{
   Output(i);
}

在不使用循环的情况下转换为下面的代码:

int i = 0; // Initialization

loopStart:
if (i < 5) // Condition
{
   Output(i);

   i++ or ++i; // Increment

   goto loopStart;
}

现在你把i++还是++i作为增量有关系吗?不,它不会,因为增量操作的返回值是不重要的。i将在for循环体内的代码执行之后递增。

我很奇怪为什么这么多人把for循环中的增量表达式写成i++。

在for循环中,当第三个组件是一个简单的增量语句时,例如

for (i=0; i<x; i++)  

or

for (i=0; i<x; ++i)   

结果执行没有区别。