在C语言中,使用++i和i++之间的区别是什么,在for循环的增量块中应该使用哪个?
当前回答
你可以把它的内部转换看作是多条语句:
// case 1
i++;
/* you can think as,
* i;
* i= i+1;
*/
// case 2
++i;
/* you can think as,
* i = i+i;
* i;
*/
其他回答
下面的C代码片段说明了前后递增和递减操作符之间的区别:
int i;
int j;
增量运算符:
i = 1;
j = ++i; // i is now 2, j is also 2
j = i++; // i is now 3, j is 2
A =i++表示A包含当前i的值。
A =++i表示A包含i的增量值。
i++被称为后增量,而++ I被称为前增量。
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的值将在i增加i之后赋给j。 类似地,++i将在j=i;之前执行。
对于你的问题,在For循环的增量块中应该使用哪个?答案是,你可以用任何一个…没关系。它将执行相同次数的for循环。
for(i=0; i<5; i++)
printf("%d ", i);
And
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。
请不要担心哪个“效率”(真的是速度)更快。现在我们有编译器来处理这些事情。使用任何一个有意义的,在此基础上更清楚地表明你的意图。
你可以把它的内部转换看作是多条语句:
// case 1
i++;
/* you can think as,
* i;
* i= i+1;
*/
// case 2
++i;
/* you can think as,
* i = i+i;
* i;
*/