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

时间:2013-06-28 14:19:02

标签: c++ increment post-increment

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

while (true) {
    //...
    i++;
    int j = i;
}

此处,j会在循环结束时包含旧的i或后递增的i吗?

8 个答案:

答案 0 :(得分:43)

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

使用结果时会出现差异:

int j = i++; // i will contain i_old + 1, j will contain the i_old.

Vs的:

int j = ++i; // i and j will both contain i_old + 1.

答案 1 :(得分:36)

取决于您如何使用它们。

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

在你的例子中,它与速度有关。 <{1}}将比++i更快,因为它不会复制。

然而,编译器可能会对其进行优化,因为您没有在示例中存储增量运算符的返回值,但这仅适用于i++等基本类型。

答案 2 :(得分:21)

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

// ++i
function pre_increment(i) {
    i += 1;
    return i;
}
// i++
function post_increment(i) {
    copy = i;
    i += 1;
    return copy;
}

一个好的编译器会在检测到不会使用返回值时自动将i++替换为++i

答案 3 :(得分:6)

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

a=++i;

在此示例中,假设变量i的值为5,则变量a的值将为6,因为i的值在表达式中使用之前会被修改。 / p>

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

a=i++;

在此示例中,假设变量i的值为5,则变量a的值将为5,因为i的值仅在将值5分配给{{后才会增加1}}。

答案 4 :(得分:4)

#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;
}

节目输出:

x=6
x=6
x=7

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

答案 5 :(得分:2)

i ++使用i的值然后递增它但++ i在使用之前递增i的值。

答案 6 :(得分:0)

后增量和增量之间的差异实际上在许多情况下是微妙的。 post incremenet,又名num++,首先创建num的副本,返回它,,然后,递增它。另一方面,预增量又名++num,首先计算,然后返回值。大多数现代编译器在循环中看到它时,通常会优化,主要是在使用后增量时,并且不使用返回的初始值。 2个增量之间最重要的区别是,在通常会产生细微的错误时,是在声明变量时使用递增的值:示例如下:

int num = 5;
int num2 = ++num; //Here, first num is incremented, 
                  //then made 6, and that value is stored in num2;

另一个例子:

int num = 5;
int num2 = num++; //Here, num is first returned, (unfortunately?), and then 
                  //incremented. This is useful for some cases.

我想说的最后一件事是小心收益。在声明变量时,请确保使用正确的增量,或者只写出整个事物(num2 = num + 1,它并不总是有效,并且相当于预增量)。如果使用正确的增量,将会节省很多麻烦。

答案 7 :(得分:0)

在独立的语句中使用前置或后置增量并不重要,除了前置增量是立即生效的

//an example will make it more clear:


int n=1;
printf("%d",n);
printf("%d",++n);// try changing it to n++(you'll get to know what's going on)

n++;
printf("%d",n);

输出: 123