循环中的预增量和后增量之间有什么区别(for/while)?

18 c++ increment post-increment

我的兴趣在于forwhile循环之间的区别.我知道使用后增量值然后递增,操作返回一个恒定的预增量.

while (true) {
    //...
    i++;
    int j = i;
}
Run Code Online (Sandbox Code Playgroud)

在这里,将j包含循环结束时的旧i或后递增i

zen*_*hoy 45

由于i ++语句;在您的示例中结束,因此无论使用前增量还是后增量都没有区别.

使用结果时会出现差异:

int j = i++; // i will contain i_old + 1, j will contain the i_old.
Run Code Online (Sandbox Code Playgroud)

VS:

int j = ++i; // i and j will both contain i_old + 1.
Run Code Online (Sandbox Code Playgroud)

  • @Tim“j 将包含 i+1”是指 i 的原始值 - 诚然不是一个理想的公式。当语句完成时 j 和 i 将具有相同的值。 (2认同)

Tim*_*Tim 38

取决于你如何使用它们.

  • i++ 制作副本,增加i,并返回副本(旧值).
  • ++i 增加i,然后返回i.

在你的例子中,它完全与速度有关.++i将会比i++没有制作副本的速度快.

但是,编译器可能会优化它,因为您没有在示例中存储增量运算符的返回值,但这只适用于像a这样的基本类型int.


Kul*_*var 22

理解的基本答案.增量运算符的工作方式如下:

// ++i
function pre_increment(i) {
    i += 1;
    return i;
}
// i++
function post_increment(i) {
    copy = i;
    i += 1;
    return copy;
}
Run Code Online (Sandbox Code Playgroud)

一个好的编译器会自动更换i++++i当检测到返回的值将不会被使用.


Pbk*_*303 6

在预增量中,首先递增初始值,然后在表达式内使用.

a = ++i;
Run Code Online (Sandbox Code Playgroud)

在这个例子中假设变量的值i是5,那么变量的值a将是6,因为i在表达式中使用它之前,会修改值.

在Post-Increment中,值首先在表达式中使用,然后递增.

a = i++;
Run Code Online (Sandbox Code Playgroud)

在这个例子中假设变量的值i是5,那么变量的值a将是5,因为,i只有在赋值5之后,gets的值才会增加a.


小智 5

#include <stdlib.h>
#include <stdio.h>

int main(int argc, char **argp)
{
    int x = 5;

    printf("x=%d\n", ++x);
    printf("x=%d\n", x++);
    printf("x=%d\n", x);

    return EXIT_SUCCESS;
}
Run Code Online (Sandbox Code Playgroud)

程序输出:

x=6
x=6
x=7
Run Code Online (Sandbox Code Playgroud)

在第一个 printf 语句中,x 在传递给 printf 之前递增,因此输出值 6,在第二个中 x 传递给 printf(因此输出 6)然后递增,第三个 printf 语句仅显示前一个后递增通过再次输出 x 现在具有值 7 的语句。