在C语言中,使用++i和i++之间的区别是什么,在for循环的增量块中应该使用哪个?


当前回答

主要的区别是 i++ Post(After Increment)和 ++i Pre(增量前) Post if I =1,循环增量为1,2,3,4,n 如果I =1,循环会增加2 3 4 5 n

其他回答

i++:在这种情况下,首先赋值,然后进行递增。

++i:在这个场景中,首先完成增量,然后赋值

下面是图像可视化,这里也有一个很好的实用视频,演示了同样的。

A =i++表示A包含当前i的值。

A =++i表示A包含i的增量值。

唯一的区别是变量的增量和运算符返回值之间的操作顺序不同。

这段代码及其输出解释了区别:

#include<stdio.h>

int main(int argc, char* argv[])
{
  unsigned int i=0, a;
  printf("i initial value: %d; ", i);
  a = i++;
  printf("value returned by i++: %d, i after: %d\n", a, i);
  i=0;
  printf("i initial value: %d; ", i);
  a = ++i;
  printf(" value returned by ++i: %d, i after: %d\n",a, i);
}

输出结果为:

i initial value: 0; value returned by i++: 0, i after: 1
i initial value: 0;  value returned by ++i: 1, i after: 1

所以基本上++i返回的值是在它被加1之后,而i++返回的值是在它被加1之前。最后,在这两种情况下,i的值都会增加。

另一个例子:

#include<stdio.h>

int main ()
  int i=0;
  int a = i++*2;
  printf("i=0, i++*2=%d\n", a);
  i=0;
  a = ++i * 2;
  printf("i=0, ++i*2=%d\n", a);
  i=0;
  a = (++i) * 2;
  printf("i=0, (++i)*2=%d\n", a);
  i=0;
  a = (i++) * 2;
  printf("i=0, (i++)*2=%d\n", a);
  return 0;
}

输出:

i=0, i++*2=0
i=0, ++i*2=2
i=0, (++i)*2=2
i=0, (i++)*2=0

很多时候是没有区别的

当返回值被赋给另一个变量时,或者当增量与应用操作优先级的其他操作一起执行时,差异很明显(i++*2不同于++i*2,以及(i++)*2和(++i)*2),在许多情况下它们是可互换的。一个经典的例子是for循环语法:

for(int i=0; i<10; i++)

有同样的效果吗

for(int i=0; i<10; ++i)

效率

预增量总是至少和后增量一样高效:事实上,后增量通常包括保留前一个值的副本,并可能添加一些额外的代码。

正如其他人所建议的,由于编译器优化很多次,它们同样有效,可能在这些情况下存在for循环。

要记住的规则

为了不混淆这两个运算符,我采用了下面的规则:

将运算符++相对于变量i的位置与++操作相对于赋值的顺序相关联

换言之:

++ before I表示必须在赋值之前进行递增; I之后的++表示必须在赋值之后进行递增:

这种差异可以通过下面这段简单的c++代码来理解:

int i, j, k, l;
i = 1; //initialize int i with 1
j = i+1; //add 1 with i and set that as the value of j. i is still 1
k = i++; //k gets the current value of i, after that i is incremented. So here i is 2, but k is 1
l = ++i; // i is incremented first and then returned. So the value of i is 3 and so does l.
cout << i << ' ' << j << ' ' << k << ' '<< l << endl;
return 0;

:不久

++i和i++的工作原理是一样的,如果你不在函数中写它们的话。如果你使用function(i++)或function(++i),你可以看到区别。

函数(++i)表示首先将i增加1,然后将i放入具有新值的函数中。

Function (i++)表示在i加1之后将第一个i放入函数中。

int i=4;
printf("%d\n",pow(++i,2));//it prints 25 and i is 5 now
i=4;
printf("%d",pow(i++,2));//it prints 16 i is 5 now